简介:
使用MFC做界面是非常痛苦的,最好借助第三方界面库。本文使用SkinMagic,下载地址:
http://pan.baidu.com/share/link?shareid=1666255608&uk=3794066601
1.使用方法
1)首先拷贝SkinMagicLib.h,SkinMagic.lib,corona.smf(后缀名为smf)到工程文件下,其中SkinMagic.dll拷到Debug下。
2)stdafx.h或者其它头文件中加入头文件和库的引用。
#pragma comment(lib,"SkinMagic.lib")//调用皮肤lib
#include "SkinMagicLib.h"
3)CxxxApp::InitInstance()中加入初始化SkinMagic库的代码和调入皮肤文件。放在调用DoModal上面位置即可。
VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));
VERIFY( 1 == LoadSkinFile("corona.smf")); //corona.smf是其中一个界面文件,使用不同的需要拷贝到工程文件下。
4)如果是对话框工程,而且没有菜单,直接在CxxxApp::InitInstance()中调用
VERIFY( 1 == SetDialogSkin( "Dialog"));
5)重写ExitInstance()函数,释放SkinMagic资源。
int CTcpAsynSApp::ExitInstance()
{
// TODO: Add your specialized code here and/or call the base class
ExitSkinMagicLib();
return CWinApp::ExitInstance();
}
2.注意事项
1)如果对话框工程有菜单,则在OnInitDialog调用下面函数。将CTcpAsynSDlg替换成你们自己的名称。
注意: 如果有菜单,须在CxxDlg::OnitDialog调用如下函数。其中CMenu::FromHandle(GetSkinMenu(g_pMianWnd->m_hWnd));是加载菜单。
CTcpAsynSDlg* g_pMianWnd = (CTcpAsynSDlg*)AfxGetApp()->GetMainWnd();
VERIFY( 1 == SetWindowSkin( g_pMianWnd->m_hWnd , "Dialog" ));
VERIFY( 1 == SetDialogSkin( "Dialog")); //其它对话框使用
CMenu::FromHandle(GetSkinMenu(g_pMianWnd->m_hWnd));
//MenuInit();
也可以使用自定义的MenuInit函数
void CTcpAsynSDlg::MenuInit()
{
CMenu menu;
menu.LoadMenu(IDR_MENU1);
SetMenu(&menu);
}
2)如果工程是文档类,则在CxxxApp::InitInstance()添加
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));
VERIFY( 1 == SetDialogSkin( "Dialog" ) );
3)在对话框属性中要关联IDR_MENU1
对话框右键属性,常规中选择菜单。