用SkinMagic工具包创建换皮肤程序

<script type="text/javascript"><!-- google_ad_client = "pub-0241434510974184"; /* 博客文章广告728x90, */ google_ad_slot = "7316585398"; google_ad_width = 728; google_ad_height = 90; // --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

下载本文示例工程

代码运行效果图如下:




以前看到瑞星和金山词霸有换皮肤功能,很是羡慕,自己也想做个换皮肤的程序,但毕竟自己能力有限,以前在此处看到一篇介绍换皮肤功能的文章,但只能应用在对话框程序上。我也试过像BCGCBar这样的大型软件,给我的感觉是软件老是出问题,应用起来也很复杂。在年前我就看到本站有SkinMagic软件包,但当时不知怎么用,发了贴子也没人回答。可能是很少有人用的缘故吧,本站也未更新此软件包。偶然的一次机会,让我知道了怎样来用它,
而且编译出来的软件体积很小,所以在这里向大家介绍一下,希望对大家有些帮助。
如何使用:
① 新建工程后,将SkinMagic包中的SkinMagicLib.h、SkinMagicLib.lib、DETOURS.lib拷贝到所在文件夹下,点击Project->Add To Project->Files,包含到工程中。
② 在Resource View中点击Import 菜单引入几个Skin二进制文件放在相同的“SKINMAGIC”文件夹下,分别给起一个名字(见源程序)。
③ 在stdafx.h中加入#include "SkinMagicLib.h"
④ 在此处添加如下内容

if (!ProcessShellCommand(cmdInfo))
	return FALSE;
/
VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), "Demo" ,NULL,NULL ) );//初始化类库
	VERIFY( 1 == LoadSkinFromResource( AfxGetInstanceHandle()  , "KROMO" ,"SKINMAGIC") );//从资源中加载皮肤 
	
	VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));
	VERIFY( 1 == SetDialogSkin( "Dialog" ) );
	((CMainFrame*)m_pMainWnd)->m_bSkinned = TRUE;
	((CMainFrame*)m_pMainWnd)->m_nIndex = 0;
	
	m_pMainWnd->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();

⑤ 在MainFrame中加入换皮肤菜单,及相应的函数,在函数中加载皮肤。

void CMainFrame::OnDevior() 
{
	 LoadSkinFromResource( AfxGetInstanceHandle()  , "DEVIOR" ,"SKINMAGIC") ; 
}

到此为止,完美的换皮肤程序就出来了。

<script type="text/javascript"><!-- google_ad_client = "pub-4159669282587342"; google_alternate_color = "FFFFFF"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "text_image"; google_ad_channel =""; google_color_border = "B4D0DC"; google_color_bg = "ECF8FF"; google_color_link = "0000CC"; google_color_url = "008000"; google_color_text = "6F6F6F"; // --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

最新评论 [发表评论] [文章投稿] 查看所有评论 推荐给好友 打印

我将皮肤改变了之后,怎么换回来呀?为什么工具栏不能自动重绘呢?请哪位高手指导一下. ( hchen118 发表于 2006-6-7 23:19:00)

SkinMagicLib.lib(MultiMonitor.obj):errorLNK2001:unresolvedexternalsymbol_xEnumDisplayMonitors@16
SkinMagicLib.lib(MultiMonitor.obj):errorLNK2001:unresolvedexternalsymbol_xGetMonitorInfo@8
SkinMagicLib.lib(MultiMonitor.obj):errorLNK2001:unresolvedexternalsymbol_xMonitorFromWindow@8
SkinMagicLib.lib(MultiMonitor.obj):errorLNK2001:unresolvedexternalsymbol_xMonitorFromPoint@12
SkinMagicLib.lib(MultiMonitor.obj):errorLNK2001:unresolvedexternalsymbol_xMonitorFromRect@8 ( hwwhmgy 发表于 2006-6-7 11:40:00)

我的错误如下
怎么解决?
谢谢了
Linking...
LIBCMT.lib(crt0dat.obj):errorLNK2005:_exitalreadydefinedinmsvcrtd.lib(MSVCRTD.dll)
LIBCMT.lib(crt0dat.obj):errorLNK2005:__exitalreadydefinedinmsvcrtd.lib(MSVCRTD.dll)
LIBCMT.lib(atox.obj):errorLNK2005:_atoialreadydefinedinmsvcrtd.lib(MSVCRTD.dll)
LIBCMT.lib(crt0init.obj):errorLNK2005:___xc_zalreadydefinedinmsvcrtd.lib(cinitexe.obj)
LIBCMT.lib(crt0init.obj):errorLNK2005:___xc_aalreadydefinedinmsvcrtd.lib(cinitexe.obj)
( hwwhmgy 发表于 2006-6-7 11:36:00)

zlg_zhuzhu,你把皮肤资源名称用""引号括起来就ok了呀!我的换肤是成功了,可是在拆分窗口下选择菜单是就不起作用了,选择自己定义的菜单无反应,有谁知道要怎么用才行? ( ems 发表于 2005-12-21 22:36:00)

为什么我用我的皮肤怎么就不成功呢~~~换成例子的皮肤就可以阿~~~难道必须要用例子的皮肤马~~~清高手指点啊??? ( zlg_zhuzhu 发表于 2005-12-7 15:11:00)

报告大家,我在本站下载的lib和h文件似乎也有问题
我用静态链接的时候使用到了mfc的afxinet.h文件
链接时候发现错误
nafxcwd.lib(mtcore.obj):errorLNK2005:"public:__thiscallCSingleLock::~CSingleLock(void)"(??1CSingleLock@@QAE@XZ)alreadydefinedinSkinMagicLib.lib(SkinMagicLib.obj)

似乎破解不完全啊! ( babam 发表于 2004-12-27 20:22:00)


ChannelAssign.obj:errorLNK2001:unresolvedexternalsymbol"int__cdeclSetDialogSkin(char*)"(?SetDialogSkin@@YAHPAD@Z)
ChannelAssign.obj:errorLNK2001:unresolvedexternalsymbol"int__cdeclSetWindowSkin(structHWND__*,char*)"(?SetWindowSkin@@YAHPAUHWND__@@PAD@Z)
ChannelAssign.obj:errorLNK2001:unresolvedexternalsymbol"int__cdeclLoadSkinFromResource(structHINSTANCE__*,char*,char*)"(?LoadSkinFromResource@@YAHPAUHINSTANCE__@@PAD1@Z)
ChannelAssign.obj:errorLNK2001:unresolvedexternalsymbol"int__cdeclInitSkinMagicLib(structHINSTANCE__*,char*,char*,char*)"(?InitSkinMagicLib@@YAHPAUHINSTANCE__@@PAD11@Z)
Debug/ChannelAssign.exe:fatalerrorLNK1120:4unresolvedexternals
Errorexecutinglink.exe.
这样的错误怎么弄??? ( 古月湖 发表于 2004-12-16 14:37:00)

能更换切分窗口中outlookbar的皮肤吗? ( sczgzgy 发表于 2004-11-10 17:27:00)

我的程序中加载资源的那句,在运行的时候老是出错,请问是怎么回事? ( zhaoxinyuan2004 发表于 2004-8-24 11:20:00)

还有根据情况改一下link里的ProjectOption.
刚才说错了,是general里的UseSharedDll. ( guqst 发表于 2004-7-26 9:49:00)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值