一 / 学习 ActiveSkin的使用
1。例程:
ActiveSkin 4.3 软件换肤在VC中的实现
MFC基本对话框工程 UseActSkin:
C:\Program Files\Microsoft Visual Studio\MyProjects\UseActSkin
1.1. 添加Active控件
1.2. 在StdAfx.h中加入//目的是导入ActiveSkin的函数接口库。
#include <atlbase.h>
#import "actskn43.ocx" no_implementation raw_interfaces_only raw_native_types
using namespace ACTIVESKINLib;
1.3. 在Dlg.cpp文件里添加语句:
CComQIPtr<ISkin> m_pSkin=GetDlgItem(IDC_SKIN)->GetControlUnknown();//m_pSkin是应用程序全局量。
m_pSkin->LoadSkin(L"皮肤文件X的路径");//如果ActiveSkin控件中已有皮肤,此句可省略。
m_pSkin->ApplySkin((int)m_hWnd);
Q: 不知道加在哪
尝试:a.在 BOOL CUseActSkinDlg::OnInitDialog() 中加入
结论:Pass
Q:m_pSkin->LoadSkin(L"皮肤文件X的路径");
1.3.1去掉L则出现系统错误。
1.3.2使用路径C:\Program Files\ActiveSkin 4.3\Skins\B-Studio.skn,则皮肤没有变化。路径中有空格,好像不行。将文件直接考到工作目录即可。
1.4 程序运行时更换皮肤。在对话框上建立一个Button,并添加Click事件:
void CMy1Dlg::OnBNewSkin()
{
static char BASED_CODE szFilter[] = "ActiveSkin Files (*.skn)|*.skn||";//文件过滤器设置。
CFileDialog dlg(FALSE, ".skn", NULL, OFN_HIDEREADONLY, szFilter);//Skin文件选择窗口。
if (dlg.DoModal() == IDOK)//Skin文件选择成功:
{
USES_CONVERSION;
m_pSkin->LoadSkin(T2W(dlg.GetPathName()));//载入指定的Skin文件。
m_pSkin->ApplySkin((int)m_hWnd);//使当前Skin生效。
}
}
Q: 加入 CComQIPtr<ISkin> m_pSkin=GetDlgItem(IDC_SKIN)->GetControlUnknown();这句话方可。