推荐界面控件ActiveSkin
http://www.vccode.com/file_show.php?id=1890
我自己试过了,但是记不得是4.25还是4.27了!
在dlg中
使用步骤!
1.在stdafx.h 中加入
#import "actskin4.ocx" no_implementation raw_interfaces_only raw_native_types
using namespace ACTIVESKINLib;
#include <atlbase.h>
2.在App.h中定义 extern CASkinApp theApp;
在App类中定义 CComQIPtr<ISkin> m_pSkin;
3.在App.cpp中的
int CASkinApp::ExitInstance()
{
m_pSkin.Release();
return CWinApp::ExitInstance();
}
4.在主对话框中
BOOL CASkinDlg::OnInitDialog()
{
theApp.m_pSkin = GetDlgItem(IDC_SKIN)->GetControlUnknown();
OnFileApplyskin();
}
5.写使用,打开,移除皮肤的函数
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
theApp.m_pSkin->ApplySkin((int)m_hWnd);
return TRUE;
}
void CASkinDlg::OnFileOpen()
{
static char BASED_CODE szFilter[] = "ActiveSkin Files (*.skn)|*.skn||";
CFileDialog dlg(FALSE, ".skn", NULL, OFN_HIDEREADONLY, szFilter);
if (dlg.DoModal() == IDOK)
{
USES_CONVERSION;
theApp.m_pSkin->LoadSkin(T2W(dlg.GetPathName()));
theApp.m_pSkin->ApplySkin((int)m_hWnd);
}
}
void CASkinDlg::OnFileRemove()
{
theApp.m_pSkin->RemoveSkin(NULL);
}
6.加入资源在程序文件夹中加入默认的皮肤文件
运行即可
加入ActiveX的方法
:右键点击对话框,点Insert AxtiveX Control
右键点击ActiveX控件,选ActiveXSkin Control Object
Load Skin.......
注意:一个ActiveX控件只能加载一次!
加载About对话框时,重载Init(),加入theApp.m_pSkin->ApplySkin((int)m_hWnd);
sdi中
使用步骤!
1.在stdafx.h 中加入
#import "actskin4.ocx" no_implementation raw_interfaces_only raw_native_types
using namespace ACTIVESKINLib;
#include <atlbase.h>
2.新建Dlg,CDlg_Skin 加载ActiveX控件
在App中包含头文件
3.在App.h中定义
extern CASkinApp theApp;
在类的定义中
CDlg_Skin m_SkinDlg;
CComQIPtr<ISkin> m_pSkin;
4.在App的
BOOL CASkinApp::InitInstance()
{
m_SkinDlg.Create(IDD_DLG_SKIN);
// Tries to create an ActiveSkin control at startup
m_pSkin = m_SkinDlg.GetDlgItem(IDC_SKIN)->GetControlUnknown();
if (!m_pSkin)
{
MessageBox(NULL, "Can't create a Skin control. Make sure ActiveSkin is installed properly.", "Error", MB_ICONERROR | MB_OK);
return false;
}
}
int CASkinApp::ExitInstance()
{
m_pSkin.Release(); // We need to release the reference to the Skin component prior destructor is called
m_SkinDlg.DestroyWindow();
return CWinApp::ExitInstance();
}
5.在Frame的
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
theApp.m_pSkin->ApplySkin((long)m_hWnd); // Applies the loaded skin to the main frame and its child windows
//默认winaqua.skn为皮肤文件放在程序文件夹里
}
加入ActiveX的方法
:右键点击对话框,点Insert AxtiveX Control
右键点击ActiveX控件,选ActiveXSkin Control Object
Load Skin.......
注意:一个ActiveX控件只能加载一次!
加载About对话框时,重载Init(),加入theApp.m_pSkin->ApplySkin((int)m_hWnd);
MDI中
使用步骤!
1.在stdafx.h 中加入
#import "actskin4.ocx" no_implementation raw_interfaces_only raw_native_types
using namespace ACTIVESKINLib;
#include <atlbase.h>
2.新建Dlg,CDlg_Skin 加载ActiveX控件
在App.h中包含头文件
3.在App.h中定义
extern CASkinApp theApp;
在类的定义中
CDlg_Skin m_SkinDlg;
CComQIPtr<ISkin> m_pSkin;
4.在App的
BOOL CASkinApp::InitInstance()
{
m_SkinDlg.Create(IDD_DLG_SKIN);
// Tries to create an ActiveSkin control at startup
m_pSkin = m_SkinDlg.GetDlgItem(IDC_SKIN)->GetControlUnknown();
if (!m_pSkin)
{
MessageBox(NULL, "Can't create a Skin control. Make sure ActiveSkin is installed properly.", "Error", MB_ICONERROR | MB_OK);
return false;
}
}
int CASkinApp::ExitInstance()
{
m_pSkin.Release(); // We need to release the reference to the Skin component prior destructor is called
m_SkinDlg.DestroyWindow();
return CWinApp::ExitInstance();
}
5.在MainFrame的
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
theApp.m_pSkin->ApplySkin((long)m_hWnd); // Applies the loaded skin to the main frame and its child windows
}
6.在ChildFrame中
BOOL CChildFrame::Create()
{
BOOL bRes = CMDIChildWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, pContext);
theApp.m_pSkin->ApplySkin((long)m_hWnd);
return bRes;
}
加入ActiveX的方法
:右键点击对话框,点Insert AxtiveX Control
右键点击ActiveX控件,选ActiveXSkin Control Object
Load Skin.......
注意:一个ActiveX控件只能加载一次!
加载About对话框时,重载Init(),加入theApp.m_pSkin->ApplySkin((int)m_hWnd);
在程序中动态更换皮肤的方法:
在MainFrm中
void CMainFrame::OnFileApply()
{
static char BASED_CODE szFilter[] = "Skin files (*.skn)|*.skn|All Files (*.*)|*.*||";
CFileDialog dlg(TRUE, ".skn", NULL, OFN_HIDEREADONLY, szFilter);
if(dlg.DoModal()==IDOK)
{
USES_CONVERSION;
theApp.m_pSkin->LoadSkin(T2W(dlg.GetFileName()));
theApp.m_pSkin->ApplySkin((long)m_hWnd);
}
}
我花了一个晚上搞定的,
希望可以帮助大家节省一点时间!