[MFC美化] MFC使用SkinMagic详解-1

Posted 我自逍遥笑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[MFC美化] MFC使用SkinMagic详解-1相关的知识,希望对你有一定的参考价值。

【SkinMagic使用流程】

1.工程配置SkinMagic相关文件

2.初始化SkinMagic皮肤文件,窗体加载皮肤

3.释放皮肤资源

 

特别声明,SkinMagic要是破解版的,如果不是,可能需要先破解!

 

1.工程配置SkinMagic相关文件

 在给窗体或对话框加载皮肤的时候首先要把使用SkinMagic所用到的相关Dll、.h文件、Lib包含到工程目录下:

  SkinMagicLib.h :放到工程的根目录

     SkinMagic.lib :放到工程的根目录或者放到其他目录,后者需要工程添加现有项,添加进资源文件

   SkinMagic.dll :放到debug调试目录

最后把相关的.smf皮肤文件放置到根目录,例如根目录的SkinMagic文件夹下。路径:SkinMagic/corona.smf。

 

以下版本的编译出来的程序运行时不再依赖SkinMagic.dll

SkinMagicLibMD6.lib 静态链接库,用于VC6的Release版编译

SkinMagicLibMT6.lib 静态链接库,用于VC6的Debug版编译

 

2.初始化SkinMagic皮肤文件,窗体加载皮肤

步骤如下:

1.在工程的stdafx.h里加载SkinMagicLib.h和SkinMagic.lib,尽量放在最后include,防止报错

#include "SkinMagicLib.h"
#pragma comment(lib,"SkinMagic")//也可以在依赖项里面设置

或者:

1、将SkinMagic.dll放置在调试目录
2、设置库文件目录,在项目[链接器]的[附加依赖项]中加入库SkinMagic.lib
3、在项目的stdafx.h文件中加入头文件 #include "SkinMagicLib.h"

 

2.初始化SkinMagic库

要使用SkinMagic,这一步必不可少。在App(应用程序)类的InitInstance()函数创建主窗口之前,添加初始化SkinMagic资源的代码。

InitCommonControlsEx(&InitCtrls);  
//
初始化皮肤库,关键在第一个要获取实例句柄。其他可为NULL。 VERIFY(1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));

对话框:

InitCommonControlsEx(&InitCtrls);在这之后添加

单文档:

在ClassView中找到CxxxAPP类.然后找到InitInstance()函数,然后在

m_pMainWnd->ShowWindow(SW_SHOW);

m_pMainWnd->UpdateWindow();在这之前添加

 

说明:
int InitSkinMagicLib( //初始化SkinMagic工具库
HINSTANCE hInstance, //应用程序句柄
char* szApplication , //皮肤文件中定义的应用程序名,置为NULL即可
   char* szRegCode, //SkinMagic的使用注册码。若无置为NULL
char* szReserved2 //保留位,为NULL
);

3.加载皮肤文件。

可以在App(应用程序)类的InitInstance()函数中也可以在Dialog的OnInitDialog()中加载。

加载分两种:(1)添加皮肤文件到资源中,并编译到程序中。

      (2)程序在运行时动态加载皮肤文件。

静态加载:比如添加corona.smf,设置资源类型为"SKINMAGIC",  资源ID为IDR_SKIN_CORONA,

注意:可能会报IDR_SKIN_CORONA为未声明的标识符,这时需要添加头文件”Resource.h“

 VERIFY(1 == LoadSkinFromResource(NULL, (LPSTR)IDR_SKIN_CORONA, "SKINMAGIC"));

动态加载:比如根目录下SkinMagic文件夹。路径:SkinMagic/corona.smf。

 VERIFY(1 == LoadSkinFile("SkinMagic/corona.smf"));

说明:

//资源名称带有双引号
int LoadSkinFromResource(
HMODULE hModule, //包含皮肤文件的模块句柄,若NULL表面在本模块中
char* lpSkinName , //皮肤资源的名称
char* lpType); //资源的类型

4.为窗口添加皮肤:

1)为标准窗口(拥有标题栏、系统菜单、可变大小等特征,比如文档/视图结构和有菜单的对话框)添加皮肤,通常用于主窗口.

在应用程序类的InitInstance()函数的底部加入如下代码

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

说明:
int SetWindowSkin(
HWND hWnd, //要使用皮肤的窗口句柄
char* lpSkinName //为skinFrameWnd对象指定的名称
);

2)为对话框添加皮肤
在对话框显示之前调用,通常在应用程序初始化函数中调用.

CNetworkDlg dlg;   
m_pMainWnd = &dlg;  

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

INT_PTR nResponse = dlg.DoModal();  

 

说明:

int SetDialogSkin( 
char* lpSkinName //为skinFrameWnd对象指定的名称
);
使用该函数后,以后程序创建的对话框都将使用该皮肤,但对话框大小不可变。

3)为单个对话框窗口添加皮肤

例如在对话框视图中:重载对话框视图的创建函数OnCreate,加入如下代码:

VERIFY( 1 == SetSingleDialogSkin( m_hWnd, "Dialog" ) );
EnableWindowScrollbarSkin( m_hWnd , SB_BOTH );

说明:
int SetSingleDialogSkin(
HWND hWnd, //要使用皮肤的窗口句柄
char* lpSkinName //为skinFrameWnd对象指定的名称
);
int EnableWindowScrollbarSkin( //为滚动条添加皮肤
HWND hWnd, //要使用皮肤的窗口句柄
int* fnBar //要使用皮肤的滚动条,SB_BOTH表明是横竖都是用皮肤
);

 

3.释放皮肤资源

在App(应用程序)类中重载应用程序的ExitInstance()函数,

可仿照InitInstance()手动添加,也可在CxxxAPP类中,右键选AddVirtualFunction,然后添加ExitInstance()函数,在其中加入:

//释放SkinMagic资源
ExitSkinMagicLib();

 

 建议:

1. 在App类中InitInstance函数中先初始化一下Skinamgic,然后加载皮肤库:

VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), _T("SCRIBBLE") , NULL, NULL ) );//初始化SkinMagic  

VERIFY( 1 == LoadSkinFile(_TEXT("AlphaOS.smf")));//加载皮肤文件

然后在Dlg类中的OnInitDialog换肤:

 SetDialogSkin(_T("Dialog")));  

 

附件:见文件

 

有关链接:

http://blog.csdn.net/colinchan/article/details/1572182

http://www.cnblogs.com/tianlangshu/archive/2011/03/20/1989436.html

http://blog.csdn.net/nonecode/article/details/7951975

 

以上是关于[MFC美化] MFC使用SkinMagic详解-1的主要内容,如果未能解决你的问题,请参考以下文章

请问这两个界面,VS2010用MFC的对话框怎样做出来的呀?

[MFC美化] USkin使用详解-使用方法

[MFC美化] SkinSharp使用详解1-使用方法

VC中使用SkinMagic给你的软件换肤

使用SkinMagic Toolkit美化界面(II)

使用SkinMagic Toolkit美化界面