3.4 Windows GDI、控件
这一节是Windows编程的最后一节,其中将讲解如何在Windows中使用图形设备接口界面的内容。在本节的最后一个小节中将对Windows控件的应用进行说明。
3.4.1 高级GDI编程
GDI从各个方面来说,还是很优秀的,并且它也是Windows系统内置的渲染引擎。也就是说,如果想创建任何工具或者标准的GDI应用程序,了解关于GDI的工作方式是很有益处的。下面就来讨论一下GDI基本的一些内容,更为复杂的内容可以浏览MSDN来深入学习。
在前面的内容中,经常看见设备描述表的类型句柄,如HDC。HDC是图形设备描述类型,当然还有其他的类型,如打印机设备描述表等。
一个图形设备描述表实际上就是对一种安装在机器上的视频图形卡的描述。实际上,在使用句柄时,就是对具体的一种设备进行操作。对于GDI的任何调用,这些信息都是必需的。从本质上来说,提供的指向任何GDI函数的HDC句柄,都是用来访问一个函数操作的设备的重要信息,这就是需要一个图形描述表的原因。
图形设备描述表要跟踪编程过程中任何可能改变的软件设置。比如在GDI中大量的使用画笔、画刷、线等类型。GDI使用这些基本数据类型来绘制任何图形,即使使用的画笔颜色不是视频卡的默认颜色,那么设备描述表也会跟踪它。因此,图形设备描述表不仅是硬件的描述,而且还是记录和保存设置的信息库。下面就来看一下如何使用GDI来对图形渲染。
1.画笔
下面的代码是画笔的创建方式:
HPEN hPen = NULL; |
这里说明的是创建一个NULL类型的画笔。hPen是一个画笔的句柄,但是hPen仍然不能使用所希望的信息来代替或删除。这样的操作可以通过下面方式中的一种完成。
(1)使用存储对象。
(2)创建一个用户定义的画笔。
需要注意的是存储对象仅仅是Windows所拥有的一些默认样式的对象。如果需要使用这些样式,可以通过函数GetStockObject()来完成。这个函数还可以取得画刷的样式。函数原型为:
HGDIOBJ GetStockObject( int fnOjbect ); |
这个函数采用希望的存储对象的样式,然后返回一个该对象的句柄。预定义的画笔存储对象,如表3-7所示。
表3-7 存储对象的样式
![]() |
如果需要使用白色的画笔可以使用下面的代码:
HPEN hPen = NULL; |
除了使用系统定义的画笔外,还可以创建自定义的画笔,函数的原型为:
HPEN CreatePen( |
线条样式如表3-8所示。
表3-8 线条样式
![]() |
下面是创建画笔的代码:
HPEN hPen = CreatePen( PS_SOLID, 1, RGB( 255, 0, 0 ) ); |
当完成了画笔的创建以后,还不能够画图。如果需要画图,还需要将画笔选择到图形设备描述表中。使用SelectObject()函数即可,函数原型为:
HGDIOBJ SelectOjbect( HDC hdc, HGDIOBJ hgdiobj ); |
HDC是设备环境句柄,前面已经详细说明过其作用。HGDIOBJ是一个组合类型,适用于图形对象句柄。函数返回当前的从该内容中取消选定的对象句柄。
实例3-6:创建一个画笔,并且选入到设备中进行绘图。
HDC hDC; |
上面的代码是一个完整的使用画笔绘图的程序。对于画图部分,在3.4.2节中会详细说明。
当画笔使用完成后,需要使用函数DeleteObject()将对象删除。函数的原型为:
BOOL DeleteObject( HGDIOBJ hOjbect ); |
2.画刷
画刷除了使用后的外观与画笔不一样外,其他都和画笔相似。因此这一部分只对不同的地方进行讲解,对于和画笔相同的部分,不再详细阐述。
画刷的定义如下:
HBRUSH hBrush = NULL; |
这条语句是创建一个空的画刷。对于系统默认的画刷类型在表3-7中已经有过说明,这里省略。下面是使用默认的浅灰色画刷的代码:
hBrush = GetStockObject( LTGRAY_BURSH ); |
在画刷的创建中还可以创建纯色的画刷,其函数原型为:
HBRUSH CreateSolidBrush( COLORREF crColor ); |
下面的程序代码是一个完整的创建和使用纯色画刷的例子。
实例3-8:创建一个纯色的画刷,并且选入到设备中进行绘图。
HBRUSH hBrush = NULL; |
使用完画刷以后请记住一定要删除画刷的句柄。使用的函数仍然是DeleteObject()。除了纯色的画刷以外,还可以创建带阴影的画刷,函数原型为:
HBRUSH CreateHatchBrush( int fnStyle, COLORREF crColor ); |
fnStyle是画刷的样式类型,如表3-9所示为支持的样式。
表3-9 阴影画刷的样式
![]() |
实例3-7:创建一个阴影效果的画刷,并且选入到设备中进行绘图。
HBRUSH hBrush = NULL; |
| 回书目 上一节 下一节 |
|
· Linux笔试面试题选摘测.. · 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. · 08年5月各大网上书店及.. |
· 2008年5月24日软考试题.. · 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. · 系统分析师自测获奖名.. |
|
||||
| · ASP.NET开发教程 · 专题:ASP.NET 2.0基础.. · LAMP技术精解 · 服务器节能与绿色IT · ARP攻击防范与解决方案 · Linux 集群技术专题 · Windows集群服务应用 · CISSP认证成长之路 |
· SQL Server 2008/2005.. · SQL Server入门到精通 · 网络工程师职业规划与.. · 浏览器的战国时代 · 运营商封堵ADSL共享 中.. · 微软出价446亿美元收购.. · 技术人求职简历完备手册 · 开源虚拟化技术Xen |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Apache技术专题 · Windows集群服务应用 · 国际文档格式标准开战 |
· 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · 了解统一威胁管理(UTM).. · 专题:AIX操作系统管理.. · 访问控制列表(ACL)介绍 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · 三层交换技术专题 · Apache技术专题 · 企业数据恢复指南 · Windows集群服务应用 |
· 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 · ASP.NET开发教程 · PHP开发应用手册 |
|||