MFC应用SkinMagic皮肤可视化包更换程序外观皮肤

发布时间: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,更多博文干货等着您。

 

 

 

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477