vc界面美化简单方案-SkinMagic

           最近导师给了一个小项目,需要用到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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值