<script type="text/javascript"> </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") ; }
到此为止,完美的换皮肤程序就出来了。
![]() | ![]() ![]() ![]() |
![]() ![]() SkinMagicLib.lib(MultiMonitor.obj) : error LNK2001: unresolved external symbol _xGetMonitorInfo@8 SkinMagicLib.lib(MultiMonitor.obj) : error LNK2001: unresolved external symbol _xMonitorFromWindow@8 SkinMagicLib.lib(MultiMonitor.obj) : error LNK2001: unresolved external symbol _xMonitorFromPoint@12 SkinMagicLib.lib(MultiMonitor.obj) : error LNK2001: unresolved external symbol _xMonitorFromRect@8 ( hwwhmgy 发表于 2006-6-7 11:40:00) ![]() 怎么解决? 谢谢了 Linking... LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit already defined in msvcrtd.lib(MSVCRTD.dll) LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit already defined in msvcrtd.lib(MSVCRTD.dll) LIBCMT.lib(atox.obj) : error LNK2005: _atoi already defined in msvcrtd.lib(MSVCRTD.dll) LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in msvcrtd.lib(cinitexe.obj) LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in msvcrtd.lib(cinitexe.obj) ( hwwhmgy 发表于 2006-6-7 11:36:00) ![]() ![]() ![]() 我用静态链接的时候使用到了mfc的afxinet.h文件 链接时候发现错误 nafxcwd.lib(mtcore.obj) : error LNK2005: "public: __thiscall CSingleLock::~CSingleLock(void)" (??1CSingleLock@@QAE@XZ) already defined in SkinMagicLib.lib(SkinMagicLib.obj) 似乎破解不完全啊! ( babam 发表于 2004-12-27 20:22:00) ![]() ChannelAssign.obj : error LNK2001: unresolved external symbol "int __cdecl SetDialogSkin(char *)" (?SetDialogSkin@@YAHPAD@Z) ChannelAssign.obj : error LNK2001: unresolved external symbol "int __cdecl SetWindowSkin(struct HWND__ *,char *)" (?SetWindowSkin@@YAHPAUHWND__@@PAD@Z) ChannelAssign.obj : error LNK2001: unresolved external symbol "int __cdecl LoadSkinFromResource(struct HINSTANCE__ *,char *,char *)" (?LoadSkinFromResource@@YAHPAUHINSTANCE__@@PAD1@Z) ChannelAssign.obj : error LNK2001: unresolved external symbol "int __cdecl InitSkinMagicLib(struct HINSTANCE__ *,char *,char *,char *)" (?InitSkinMagicLib@@YAHPAUHINSTANCE__@@PAD11@Z) Debug/ChannelAssign.exe : fatal error LNK1120: 4 unresolved externals Error executing link.exe. 这样的错误怎么弄??? ( 古月湖 发表于 2004-12-16 14:37:00) ![]() ![]() ![]() 刚才说错了,是general里的Use Shared Dll. ( guqst 发表于 2004-7-26 9:49:00) |