当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 让你的软件界面更漂亮(二)

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 让你的软件界面更漂亮(二)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 129 ::
收藏到网摘: n/a

让你的软件界面更漂亮(二)
作者:朱一松

一、统一风格漂亮界面设计的理论与实现

a.窗口和对话框

Windows操作系中窗口和对话框在我们看来是一样的,就是一个四边形,有标题栏、系统按钮,边框等,可移动和可变大小。实际上窗口和对话框是有的区别的。在创建对话框窗口时的工作中要发生两个主要过程:对话框的过程和其窗口过程。Win32 SDK对话框使用了系统提供的对话框窗口的窗口过程和对话框过程,对话框过程将被窗口过程调用。在MFC下,所有的窗口类都使用了同一个窗口过程,对话框类也一样。MFC对话框过程只处理WM_INITDIALOG消息,其余都让窗口过程处理,我们只能在函数OnInitDialog()中有唯一机会处理我们的对话框的初始化工作。因而我们设计界面时要在窗口过程处理中相关消息实现我们的界面。

b. 几个有关对话框窗口消息的处理

1.WM_NCPAINT:重画非客户区消息

重载此消函数,可以标题栏上为所欲为。

2. WM_NCLBUTTONDOWN:在非客户区上按下鼠标左键消息

要想在标题栏相应鼠标左键,可重载此消函数

3.WM_NCMOUSEMOVE:在非客户区上移动鼠标会产生此消息

4.WM_SIZE:在窗口改变大小后产生此消息。

为了使软件更专业,调整对放框大小时,里面的各控件也应合理调整位置和大小,

重载此消函数可实现目的。还有很几个,其它的不介绍了。

c. 统一的界面风格实现

如何运用上述知识请参考我的前一文《让你的软件界面更漂亮(一)》中有介绍并有源程序。漂亮界面的统一风格是如何实现的将是本文要讨论主要内容。

我们知道Windows操作系统窗口风格基本上是一致的,微软的应用软件程序也和操作系统风格基本是统一的。所以使我们的CDialog 也跟其一样,要改变它的界面风格很困难。除非你对MFC了如指掌,甚至要了解操作系统内核。本人在摸索过程中经过无数次碰壁后,终于找到了希望。

请看下面两幅图:

图一


图二

看了上面两图你是不是对VC有信心了?Visual C++ 可实现你想要的统一风格界面。请看如何实现:

1.首先要建立漂亮界面主窗口。它也是一个对话框,方法前文有介绍。

2.处理漂亮界面主窗口的OnInitDialog()函数。很重要!!

BOOL CTitleBarDlg::OnInitDialog(){//此处 不能修改和添加代码!因为其它对话框的OnInitDialog()要用到m_ToolTip.Create(this,TTS_ALWAYSTIP);//Create提示 m_ReSizeFlag = TRUE; CRect rtWnd;GetClientRect(&rtWnd);m_OldWidth = rtWnd.Width();m_OldHeight = rtWnd.Height();OldPoint.x = rtWnd.Width();OldPoint.y = rtWnd.Height();if(!m_BaseFlag){ m_BaseFlag = TRUE; CDialog::OnInitDialog(); //************************************ 你只能在处修改和添加你所需主窗口初始化的代码…… //************************************ }return TRUE;}
3.建立你的对话框和对话框类。

用对话框资源编辑器完成对话框模板。用ClassWizard生成CyourDlg类此时基类只能为CDialog。

4.修改基类CDialog为漂亮界面类(CtitleBarDlg)

yourDlg.h yourDlg.cpp 内的CDialog都要改,用Edit/Replace功能快些且安全。

在yourDlg.h还要包括TitleBarDlg.h

注意:对话框构造函数第一个参数CtitleBarDlg nID 要删除。否则通Build通不过。

5. 显示你的窗口

//显示代码 CyouDlg *pMyDlg; pMyDlg = new CyouDlg; pMyDlg->Create(IDD_YOUR_DLG); pMyDlg->ShowWindow(SW_SHOW);
这种代码要在适当的时候delete pMyDlg,防内存泄露。由于 pMyDlg没有定义为全局,处理它有一定难度。如果是用DoModal()显示就好了,大家可以去试一下。解决了告诉我!

6. 完成编译运行。你的对话框的风格是不是和主窗口一样,有没显示出来?

二.说明

统一风格的漂亮界面基本达到了目