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

版权声明:本文为博主原创文章,未经博主允许不得转载,如需转载请先得到博主的同意,谢谢。 https://blog.csdn.net/HW140701/article/details/54024090

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


以上例举了几个皮肤文件,其他的就不一一例举了,可以自己使用SkinMagicBuilder制作皮肤。



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页