VC使用SkinMagic的方法

这篇博客详细介绍了如何在VC环境下使用SkinMagic库来实现文档程序和对话框程序的皮肤更换。步骤包括导入库文件,添加头文件,初始化SkinMagicLib,设置窗口皮肤,以及加载皮肤文件的方法。用户只需更改LoadSkinFromResource的参数即可切换皮肤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.文档程序

① 新建工程后,将SkinMagic包中的SkinMagicLib.h、SkinMagicLib.lib、DETOURS.lib拷贝到所在文件夹下,点击Project->Add To Project->Files,包含到工程中。

② 在Resource View中点击Import 菜单引入几个Skin二进制文件放在相同的“SKINMAGIC”文件夹下,分别给起一个名字(见源程序)。

③ 在stdafx.h中加入#include "SkinMagicLib.h"

④ 在此处添加如下内容

01. if (!ProcessShellCommand(cmdInfo))
02. return FALSE;
03. /
04. VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), "Demo" ,NULL,NULL ) );//初始化类库
05. VERIFY( 1 == LoadSkinFromResource( AfxGetInstanceHandle()  , "KROMO","SKINMAGIC") );//从资源中加载皮肤
06.  
07. VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));
08. VERIFY( 1 == SetDialogSkin( "Dialog" ) );
09. ((CMainFrame*)m_pMainWnd)->m_bSkinned = TRUE;
10. ((CMainFrame*)m_pMainWnd)->m_nIndex = 0;
11.
12. m_pMainWnd->ShowWindow(SW_SHOW);
13. m_pMainWnd->UpdateWindow();

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

1. void CMainFrame::OnDevior()
2. {
3. LoadSkinFromResource( AfxGetInstanceHandle()  , "DEVIOR" ,"SKINMAGIC") ;
4. }

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

如果想更换皮肤只需要更换LoadSkinFromResource的参数为当前目录下的皮肤文件就可以了。

 

 

2.对话框程序

1
先把skinmagiclib.h文件拷贝入工程目录,
在左边的fileview卡片里面,在Resource files栏目加入SkinMagicLib.lib和DETOURS.lib,这两个文件的路径在哪里无所谓,只要加入就行。可以把它们拷贝入工程的目录下。还有,可以把smf皮肤文件都拷贝入工程的目录下,方便加载皮肤。
在FileView卡片里面加入SkinMagicLib.h文件,并在stdafx.h中加入#include "SkinMagicLib.h"
2
在C**App类的文件里面找到InitInstance函数
在函数开始部分加入
VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), "Demo" ,
       NULL,
       NULL ) );//Demo字样可以随意修改
VERIFY( 1 == LoadSkinFile("corona.smf") ); //皮肤文件只要在同一目录下就行。如果没有
//就编译出错
3
按Ctrl+W,看到ClassWizard,再给C**App类加入ExitInstance函数
内容是
ExitSkinMagicLib();//为了退出时清理内存
return CWinApp::ExitInstance();
4
在C**Dlg::OnInitDialog()函数里面
结束部分加入
SetWindowSkin( m_hWnd , "Dialog" );
SetDialogSkin("Dialog");
5
加一个按钮或者菜单,内容是“load skin”
添加按钮点击事件的代码为
  char strExt[]= "SkinMagic Files(*.smf)|*.smf||";
CFileDialog dlg( TRUE, "*.smf", "*.smf" , OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT
               , strExt ,  this );

if( dlg.DoModal() == IDOK  )
{
  LoadSkinFile( (char*)(LPCSTR)(dlg.GetPathName()) );
}

 

//这里当然可以直接LoadSkinFile("Kromo.smf");//要保证smf就放在程序同个目录下,不然就要指定路径了

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值