前些天用MFC开发一个桌面程序,实现功能后客户说界面太难看,自己仔细看看也着实难看,所以就仔细的研究了下MFC的美化方法,特此分享给大家。
★利用SkinMagic美化MFC的界面。
SkinMagic是一个C++的皮肤库,使用它可以完美的实现给你的程序换肤。
代码运行效果图如下:
以前看到瑞星和金山词霸有换皮肤功能,很是羡慕,自己也想做个换皮肤的程序,但下手着实有些困难。我也试过像BCGCBar这样的大型软件,给我的感觉是软件老是出问题,应用起来也很复杂。后来知道了SkinMagic软件包,但当时不知怎么用,发了贴子也没人回答。可能是很少有人用的缘故吧,本站也未更新此软件包。偶然的一次机会,让我知道了怎样来用它,
而且编译出来的软件体积很小,所以在这里向大家介绍一下,希望对大家有些帮助。
如何使用:
① 新建工程后,将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的参数为当前目录下的皮肤文件就可以了。
我这里有完整的demo已经很多的皮肤文件,需要的可以点击这里下载。
★利用flash来美化MFC的界面:
效果图:
代码:
BOOL CPlayFlashDlg::OnInitDialog() { CDialog::OnInitDialog(); ... // TODO: Add extra initialization here RECT rc; this->GetClientRect(&rc); m_FlashPlayer.MoveWindow( &rc, true ); TCHAR strCurDrt[500]; int nLen = ::GetCurrentDirectory(500,strCurDrt); if( strCurDrt[nLen]!='\\' ) { strCurDrt[nLen++] = '\\'; strCurDrt[nLen] = '\0'; } CString strFileName = strCurDrt; strFileName += "startup.swf"; m_FlashPlayer.LoadMovie(0, strFileName); m_FlashPlayer.Play(); return TRUE; // return TRUE unless you set the focus to a control }
void CPlayFlashDlg::OnFSCommandShockwaveflash1(LPCTSTR command, LPCTSTR args) { // TODO: Add your control notification handler code here if( 0 == strcmp(command,"bt") ) { if( 0 == strcmp(args,"enter") ) { MessageBox("欢迎进入系统!"); } } else if( 0 == strcmp(command,"quit") ) { MessageBox("您选择了退出!"); CDialog::OnCancel(); } }
0.0这样加载你的flash就OK了。demo可以在这里下载。
一下是一些详细的介绍:
一、准备工作
第一步:下载并安装Adobe
Flash Player。
从官方网站(http://get.adobe.com/cn/flashplayer/)上下载最新的Flash
Player(大约为2.66M),并安装。对于Windows
32位系统,其默认安装目录为:C:\WINDOWS\system32\Macromed\Flash\;对于64位系统,为:C:\Windows\SysWOW64\Macromed\Flash。
Flash控件的大版本号用数字表示,如9