用
SkinMagic
工具包创建换皮肤程序
如何使用:
①
下载
SkinMagic
的开发包,我用的开发包需要下面几样东西:
SkinMagicLib.lib
,
DETOURS.lib
两个库文件;
.smf
文件(皮肤文件);还有个
SKinMagicLib.h
文件;这些就足够了
(
SkinMagicLib.lib 1199kB
的据说经处理不会显示
[Powered by SkinMagic]
,
但我这里用着会产生问题,
不得已还是用了
998kB
的)
②
新建工程后,将
SkinMagic
包中的
SkinMagicLib.h
、
SkinMagicLib.lib
、
DETOURS.lib
拷贝到所在文件夹下,点击
Project->Add To Project->Files,
包含到工程中。
(SkinMagicLib.h
、
SkinMagicLib.lib
可以直接放在工程文件中,
DETOURS.lib
和
.smf
皮肤文件
可以放在
res
文件夹中
)
③
在
Resource View
中点击
Import
菜单引入几个
Skin
二进制文件放在相同的
“SKINMAGIC”
文件夹下,分别给起一个名字(见源程序)。
(4)
在
stdafx.h
中加入
#include "SkinMagicLib.h"
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
#include "SkinMagicLib.h"
//{{AFX_INSERT_LOCATION}}
(5)打开以你工程名字命名的CPP文件,在里面的InitInstance()函数里,
单文档
在 if (!ProcessShellCommand(cmdInfo)) return FALSE;
这一句的后面加上更换皮肤的关键代码:
这一句的后面加上更换皮肤的关键代码:
/***********************
换肤代码*********************************/
VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), NULL , NULL, NULL ) ); //初始化类库
VERIFY( 1 == LoadSkinFromResource( AfxGetInstanceHandle() , "KROMO" ,"SKINMAGIC") );//从资源中加载皮肤
VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" )); //
对话框这句可不也可以放着
VERIFY( 1 == SetDialogSkin( "Dialog" ) );
//m_pMainWnd->ShowWindow(SW_SHOW);
//m_pMainWnd->UpdateWindow();
/**************************************************************/
其中,第二句的作用是更换皮肤资源;(本来还有另外一种换肤的途径,直接从文件读取,不需要引导资源,更加简洁,但是这样子直接运行exe文件会出现问题,百思不得其解,只有舍弃)
其中,第二句的作用是更换皮肤资源;(本来还有另外一种换肤的途径,直接从文件读取,不需要引导资源,更加简洁,但是这样子直接运行exe文件会出现问题,百思不得其解,只有舍弃)
(5)让你的程序更进一步,在菜单栏中添加更换皮肤项目,只需要在它的相应函数中写入:
VERIFY( 1 == LoadSkinFromResource( AfxGetInstanceHandle() , "KROMO" ,"SKINMAGIC")
,就可以实现换肤的功能了,当然这里"IDR_Devior"需要换成你想更换皮肤资源的ID;
(6)我在实际运行的时候发现了一个问题,编译时只能选择MFC共享的DLL,如果用动态的库链接则会出现问题,好像是说库与库之间命名冲突之类,可能是SkinMagicLib库的问题,我找了很多SkinMagicLib的库,试了很多遍都没有办法解决,只有在编译时注意一下,选择MFC共享的DLL;
(7)
在MainFrame中加入换皮肤菜单,及相应的函数,在函数中加载皮肤。
void CMainFrame::OnDevior()
{ LoadSkinFromResource( AfxGetInstanceHandle() , "DEVIOR" ,"SKINMAGIC") ;
}
参考资料:http://www.vckbase.com/document/viewdoc/?id=752
问题:
我用
skinmagic
做皮肤,感觉不错,可就是在顶部标题栏中有
"powered by skinmagic"
。
解决方法:
在标题后面加一大堆空格
::SetWindowText(str);
(设置标题内容)
设置标题内容
在
OnInitDialog()
中
SetWindowText("
标题内容
”)