随着Microsoft凭借Windows在操作系统上取得的巨大成绩,Windows用户界面也
日益成为业界标准。统一的界面给广大用户对应用软件的学习与使用带来了很大
方便。但每天都面对同一副面孔,日久天长难免会产生一些厌倦,开发一些"离
经叛道",一改Windows应用程序千篇一律的"标准"界面,一定会给你带来一种清
新的感觉。
---- 标准Windows应用程序窗口一般为带有标题栏的浅灰色矩形外观,因而"异
形"对话框/窗口也主要是颜色与外形上动手脚。
---- 1.改变背景颜色
---- 改变对话框(窗口)的背景颜色是最简单的改变Windows应用程序外观的
方法,根据Windows创建与管理机理,一般有两种方法。一种是处理WM_CTLCOLOR
消息,首先创建所选背景颜色的刷子,然后调用SetBkColor()或
SetDialogBkColor()以所创建的刷子来绘制窗口或对话框的背景。需要重画窗
口或对话(或对话的子控件)时,Windows向对话发送消息WM_CTLCOLOR,应用程
序处理WM_CTLCOLOR消息并返回一个用来绘画对话背景的刷子句柄。另外一种是
响应Windows的WM_ERASEBKGND消息,Windows向窗口发送一个WM_ERASEBKGND消息
通知该窗口擦除背景,可以使用VC++的ClassWizard重载该消息的缺省处理程序
来擦除背景(实际是用刷子画),并返回TRUE以防止Windows擦除窗口。
---- 2.改变窗口外形
---- 通过使用新的SDK函数SetWindowRgn(),可以将绘画和鼠标消息限定在窗
口的一个指定的区域,因此实际上是使窗口成为指定的不规则形状(区域形状)
。"区域"是Windows GDI中一种强有力的机制,区域是设备上的一块空间,可以是
任意形状,复杂的区域可以由各个小区域组合而成。Windows内含的区域创建函
数有CreateRectRgn()、CreatePolyRgn()、CreatePolygonRgn()、
CreateRoundRectRgn()和CreateEllipticRgn(),再通过CombineRgn()来组合
区域,即可得到复杂形状的区域,获得复杂形状的窗口外形。
---- 通过上面的方法虽然可以得到"异形"窗口,但感觉颜色单调,外形也
不够"COOL",能否获得更酷的"异形"对话框/窗口呢?回答是肯定的。下面就
介绍利用位图和蒙板创建"异形"对话框/窗口的方法。
---- 3.利用位图创建异形对话框窗口
---- 利用位图创建异形对话框原理是根据象素的颜色来进行"扣像"处理,对所有
非指定颜色象素区域进行区域组合。利用这一技术,实际上就是实现对话框/窗
口的位图背景,并且对指定的颜色区域进行透明处理。
---- 下面就以透明位图为背景的对话框为例来说明:(略)......
---- 4.进一步的讨论
---- 前面实现了单一模式的异形对话框,但有些情况下又需要不同的样式,如
有标题栏、边框等,或者只作局部的处理,这就是前面两个成员变量
m_FrameWidth和m_CaptionHeight作用,通过在OnInitDialog()判断窗口样式,
使m_FrameWidth和m_CaptionHeight取不同的值。这部分的代码为:......
---- 5.结束语
---- 这种异形窗口的创建不仅适应于对话框,而且适应于所有的基于CWnd类的
派生窗口。采用这一方法,你可以创建出任何只要你能够画出的窗体,实现只要
可以画出,就可以做出的目标。
---- 本文代码在Visual C++ 6.0下调试通过,运行正常,操作系统为