VC++软件界面风格简单美化
最后更新于:2022-04-01 20:34:45
为了让软件能在视觉上给用户带来一种清新的感觉,从而避免潜在的用户视觉疲劳和审美疲劳,软件一般都要经过专业的界面设计和美化。但是,我们不是也没有专业的界面设计美化人员,所以只能对软件的界面和风格进行初步的简单美化,主要是色调的搭配、图片、字体的简单美化处理等基本工作。
下面结合实例,详细介绍一下之前的软件开发中所用到的两种软件界面风格简单美化的方法:
(1)采用OnCtlColor函数,对软件的界面进行简单的美化。(**完整的实例程序可在我的CSDN资源中下载:[http://download.csdn.net/detail/margin1988/4241231](http://download.csdn.net/detail/margin1988/4241231)**)
采用这种方式,只能对软件界面在背景颜色、控件颜色、字体等方面做简单的美化。其主要的操作步骤如下:
1)在相应的.h文件中添加OnCtlColor函数:
~~~
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
~~~
2)在相应的.cpp文件中添加消息映射宏:
~~~
BEGIN_MESSAGE_MAP(CPoint11Dlg, CDialog)
ON_WM_CTLCOLOR()//OnCtlColor函数的消息映射宏
END_MESSAGE_MAP()
~~~
3)在相应的.cpp文件中编写OnCtlColor函数的实现体:
~~~
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
switch (nCtlColor)
{
case CTLCOLOR_STATIC: //静态文本
{
pDC->SetBkMode(TRANSPARENT);
HBRUSH B = CreateSolidBrush(RGB(191,219,255)); //控件背景颜色
pDC->SetTextColor(RGB(0,0,0)); //控件中的文字的颜色
return (HBRUSH) B;
}
break;
case CTLCOLOR_DLG : //对话框背景
{
pDC->SetBkMode(TRANSPARENT);
HBRUSH B = CreateSolidBrush(RGB(191,219,255));
pDC->SetTextColor(RGB(0,0,0));
return (HBRUSH) B;
}
break;
default:
return hbr;
break;
}
~~~
※需要注意的一点是:当对话框背景颜色和静态文本的背景色设置一样时,软件界面中的静态文本产生的阴影将消失,使得界面更加整洁。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-31_57c6b4a48ceeb.jpg)
(2)使用SkinMagic插件,对软件的整体界面风格进行改变和美化。(**完整的实例程序可在我的CSDN资源中下载**)
使用这种方式,可以改变软件的整体风格,从而也改变了软件中所有细节的风格,可以达到比较好的整体美化效果。但是,使用这种方式也有它自己的缺点,那就是虽然SkinMagic插件是一个免费的插件,但是它所提供的界面风格是相当有限的,而且这其中的界面风格比较清新好看的更是少之又少。SkinMagic插件的使用步骤如下:
1)将SkinMagicLib.h,SkinMagicTrial.lib,SkinMagicTrial.dll三个文件copy到程序目录中。
2)将SkinMagicLib.h添加到工程的“头文件”中;在工程“属性”页的“配置属性-链接器-输入”的“附加依赖项”中输入SkinMagicTrial.lib。
3)在stdafx.h中添加:
~~~
#include "SkinMagicLib.h"
#pragma comment(lib,"SkinMagicTrial.lib")
~~~
4)在"工程名App.cpp"或者"工程名.cpp"中的InitInstance()函数中添加:
~~~
VERIFY(1==InitSkinMagicLib(AfxGetInstanceHandle(),_T("Demo"),NULL, NULL));
CString str;
str.Format("%ssmf\\corona.smf",g_BasePath);
VERIFY(1==LoadSkinFile(_T(str)));
SetDialogSkin(_T("Dialog"));
~~~
5)在项目的配置属性中改为使用“使用多字节字符集”字符集,否则编译时会出现函数名无法解析的错误。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-31_57c6b4a4a0799.jpg)
';