您的位置:首页 > 其它

vc界面美化简单方案-SkinMagic

2011-11-15 16:12 435 查看
最近导师给了一个小项目,需要用到MFC,怎奈vc6.0的搞出来的东西实在有点丑,遂在网上搜索解决方案,最终找到了这个,SkinMagic,换肤控件。调试期间也碰到很多问题,遂一一记录下来。

SkinMagic使用方法:

1.导入文件和皮肤资源:

点击工程->增加到工程->加入SkinMagicLib.h SkinMagicLib.lib DETOURS.lib 文件;

切换到Resouce View ,右击,引入,加入皮肤资源corona.smf 注意皮肤文件ID最好改成"XXX"的形式,否则可能会出现未知错误:



2.在stdafx.h中加入头文件,如下:

#i nclude "SkinMagicLib.h"

3. 初始化SkinMagic库:

int __stdcall InitSkinMagicLib( HINSTANCE hInstance,

LPCTSTR lpApplication ,

LPCTSTR lpReserved1,

LPCTSTR lpReserved2 );

在 CxxxApp::InitInstance()中加入初始化SkinMagic库的代码:

VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));

4.从资源文件中调用皮肤:

int __stdcall LoadSkinFromResource(HMODULE hModule,

  LPCTSTR lpSkinName ,

LPCTSTR lpType);

现在CxxxApp::InitInstance()中的代码如下:

BOOL CxxxApp::InitInstance()

{

VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));

VERIFY( 1 == LoadSkinFromResource( AfxGetInstanceHandle() , "corna","SkinMagic") );

AfxEnableControlContainer();

//…..下略

5、将皮肤应用到程序上

int __stdcall SetWindowSkin( HWND hWnd , LPCTSTR lpSkinName );

  int __stdcall SetDialogSkin( LPCTSTR szSkinName );

对话框程序代码位置:

BOOL CxxxApp::InitInstance()

{

//...上略

m_pMainWnd = &dlg;

VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));

VERIFY( 1 == SetDialogSkin( "Dialog" ) );

int nResponse = dlg.DoModal();

//…下略

}

6、释放SkinMagic资源

void __stdcall ExitSkinMagicLib();

重载应用程序的ExitInstance()函数,添加如下代码:

int CxxxApp::ExitInstance()

{

ExitSkinMagicLib();

return CWinApp::ExitInstance();

}

Ok,到此结束,启动应用程序,你会发现你的程序焕然一新了:



编译错误总结:

error LNK2005: __setmbcp already defined in libcmtd.lib(mbctype.obj)

工程->设置->连接->输入 ,忽略库,libcmtd.lib,其他情况类似。

fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds

工程->设置->c/c++->Code Generation->Multithread

最后附上下载,包括破解文件和对话框演示程序: http://download.csdn.net/detail/emiyasstar__/3798657
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: