vc界面美化简单方案-SkinMagic

来源:互联网 发布:vue.js常用开发工具 编辑:程序博客网 时间:2024/05/21 08:51

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

原创粉丝点击