TOP

用VC++实现异形窗口
2014-11-23 20:10:50 】 浏览:9457
Tags:实现 异形 窗口

随着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下调试通过,运行正常,操作系统为


用VC++实现异形窗口 https://www.cppentry.com/bencandy.php?fid=55&id=16842

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇在VC++6.0开发中实现全屏显示 下一篇Visual C++中建立滚动视窗