发布时间:2025-12-09 17:30:29 浏览次数:4
1.SkinMag MFC美化界面库
总所周知,MFC的皮肤比较呆板,有各种各样的MFC界面库可以供我们使用,来修改程序的外观。C++界面库可以参见:http://blog.csdn.net/witch_soya/article/details/10982451
在这里介绍一种配置比较简单的MFC界面库SkinMagic。
可从这里下载SkinMagic2.4破解版:http://download.csdn.net/download/wbxyzwh/9693071
下载解压后,文件夹文件如下:
2.SkinMagic在VS2010 MFC程序中的配置
2.1文件拷贝
将下列三个文件以及所有的*.smf皮肤文件拷贝至建立的MFC工程文件目录下
2.2在stdafx.h中加入头文件和库的引用,如下:
#include "SkinMagicLib.h"
#pragma comment(lib, " SkinMagic.lib")
2.3初始化SkinMagic库:
int __stdcallInitSkinMagicLib( HINSTANCE hInstance,
LPCTSTR lpApplication ,
LPCTSTR lpReserved1,
LPCTSTR lpReserved2 );
在CxxxApp::InitInstance()中加入初始化SkinMagic库的代码:
VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));
2.4调入皮肤文件:
皮肤的调用有两种方法,一是直接从皮肤文件中调用,另一种方法是从资源文件中调用,分别说明如下:
1) 从皮肤文件中调用皮肤:
int __stdcall LoadSkinFile( LPCTSTR lpSkinFile );
现在直接从文件中调用皮肤如下CxxxApp::InitInstance()中的代码如下:
BOOL CxxxApp::InitInstance(){VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));VERIFY( 1 ==LoadSkinFile("corona.smf"));AfxEnableControlContainer();//…..下略}
corona.smf为皮肤文件
2)从资源文件中调用皮肤:
int __stdcallLoadSkinFromResource(HMODULE hModule,
LPCTSTR lpSkinName ,
LPCTSTR lpType);
将皮肤文件加载进入资源,选择里面的一个*.smf皮肤文件,将其拷贝到工程文件的res目录下,然后在程序中加载该资源。我们在资源目录里新建一类资源"SKINMAGIC",然后添加皮肤文件到其中,设置资源ID,如下图:
在CxxxApp::InitInstance()中的加入以下代码如下:
VERIFY(1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL)); VERIFY(1 == LoadSkinFromResource(AfxGetInstanceHandle(),(LPCTSTR)ID,"SKINMAGIC"));
在这里,从文件中直接加载皮肤比较简单,但是皮肤文件要拷贝到当前工程目录下
2.5 将皮肤应用到程序上
int __stdcall SetWindowSkin( HWND hWnd ,LPCTSTR lpSkinName );
int __stdcallSetDialogSkin( LPCTSTR szSkinName );
1)对话框程序代码位置:
BOOL CxxxApp::InitInstance(){//...上略m_pMainWnd = &dlg;VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));VERIFY( 1 == SetDialogSkin( "Dialog" ) );int nResponse = dlg.DoModal();//…下略}
按照上面设置的话,假如对话框有自己设计的菜单menu,那么菜单会消失,所以删除上列代码,改进后在下列地方加入代码
CXXXDialog::InitDialog()//函数中添加如下代码{SetWindowSkin(m_hWnd,"Dialog");VERIFY( 1 == SetDialogSkin( "Dialog" ) );}
2)文档视图程序代码的位置
BOOL CxxxApp::InitInstance(){//…上略m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->UpdateWindow();VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));VERIFY( 1 == SetDialogSkin( "Dialog" ) );return TRUE;}
2.6 释放SkinMagic资源
void __stdcall ExitSkinMagicLib();
重载应用程序的ExitInstance()函数,添加如下代码:
int CxxxApp::ExitInstance() {ExitSkinMagicLib();return CWinApp::ExitInstance();}
到这里,SkinMagic就设置完成了。
3. SkinMagic界面库各个皮肤效果
3.1 Devior.smf
3.2 futuraIII.smf
3.3 KromoBlue.smf
3.4 Tusk.smf
3.5 xpblue.smf
3.6 xpgrean.smf
3.7 x-plus.smf
3.8 xpsteel.smf
3.9 corona.smf
如果您觉得这篇博文有用,请访问我的个人站:http://www.stubbornhuang.com,更多博文干货等着您。