在进行开发的过程中发现MFC
本身的界面比较丑,查阅资料说可以直接借用第三方界面库。使用(SkinMagic
、Skin++
、VCLSkins
)皮肤库,来直接美化界面。
一、开发环境
VS 2017
SkinMagic
、Skin++
、VCLSkins
皮肤库
二、SkinMagic的使用方法
1. 制作SkinMagic
需要自己使用SkinMagic
提供的SkinMagicBuildr
设计自定义风格的一套皮肤。这里我使用的是网上已经制作好的,若自己有兴趣可以去进行制作。
2. 往项目中添加SkinMagic文件
注意:SkinMagic只适用多字节符集,不适用于Unicode字符集
复制 SkinMagicTrial.dll
、SkinMagicTrial.lib
、SkinMagicLib.h
以及皮肤文件 *.smf
文件到工程目录下
在pch.h
头文件下添加:
#include "SkinMagicLib.h"
#pragma comment(lib,"SkinMagic.lib")//调用皮肤lib
2. 初始化SkinMagic加载皮肤文件
在`InitInstance()"函数下添加:
VERIFY(1 == InitSkinMagicLib(AfxGetInstanceHandle(), _T("SCRIBBLE"), NULL, NULL));//初始化SkinMagic
VERIFY(1 == LoadSkinFile(_TEXT("KromoBlue.smf")));//加载皮肤文件
3. 给窗体加载皮肤
如果对话框没有菜单,则在CXXXDlg
类的OnInitDialog
函数`下添加:
//对话框没有菜单
VERIFY( 1 == SetWindowSkin( this->m_hWnd , TEXT("Dialog")));//设置皮肤样式
4. 释放皮肤
在 CXXXXXApp::ExitInstance()
函数中加入以下代码,其中XXXXX
为工程名称,若不存在 ExitInstance()
函数,请自行添加。在CXXXAPP类下,重写ExitInstance()
函数:
int CSkinMagicApp::ExitInstance()
{ExitSkinMagicLib();return CWinApp::ExitInstance();;
}
5、运行效果
展示如下几个效果图:
①corona.smf显示效果
②KromoBlue.smf显示效果
③Devior.smf显示效果
6、特别提示
(1)、如果工程中需要添加菜单、则在OnInitDialog调用下面函数。
CMenu *pMenu = new CMenu();pMenu->LoadMenu(IDR_MENU1);//IDR_MENU1为菜单栏ID号SetMenu(pMenu);_hWnd, TEXT("Dialog")));//设置皮肤样式return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
(2)、如果是单文档或者多文档,则在InitInstance
中添加如下代码:
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow(); //在这两个下面添加VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));
VERIFY( 1 == LoadSkinFile(_T("kromo.smf")));
三、Skin++的使用方法
有了使用SkinMagic
皮肤库的经验在使用Skn++
那就简单了。基本类似
1. 往项目中添加文件
注意:Skin++只适用多字节符集,不适用于Unicode字符集
将SkinPPWTL.lib
、skinppwtl.dll
、SkinPPWTL.h
三个文件及相应皮肤(**.ssk)拷贝至工程文件夹下
2. 初始化Skin++加载皮肤文件
在InitInstance
中添加如下函数:
skinppLoadSkin(_T("AngeliteV2.ssk"));
3. 在释放皮肤
在ExitInstance
中调用:skinppExitSkin()
; 释放资源
int CSkinApp::ExitInstance()
{skinppExitSkin();return CWinApp::ExitInstance();
}
4.运行效果
①AngeliteV2.ssk显示效果
四、VCLSkins 的使用方法
注意:VCLSkinS只适用对话框,不适用单文档和多文档。VCLSkins采用的是Delphi里边成熟的界面组件vclskin,将它做成Dll来用。
VCLSkins
的使用方式与SkinMagic
和Skn++
基本类似。这里就不做介绍。