📄 g04.htm
字号:
<SCRIPT LANGUAGE="JavaScript" SRC="/-fs0/sys/pop-up.js"></SCRIPT><SCRIPT LANGUAGE="JavaScript" SRC="/-fs0/sys/pop-up-all.js"></SCRIPT><html><head><title>易都网--Windows游戏编程大师技巧</title><LINK rel="stylesheet" href="../../_public/javaa.css"><meta http-equiv="Content-Type" content="text/html; charset=GBK"><script language="JavaScript" src="../../_public/javaa.js"></script><meta name="keywords" content="Java,JSP,ASP,PHP,J2EE,EJB,JavaScript,C/C++,ASM,CSS,HTML,XML,网络安全,MySQL,ACCESS"></head><body bgcolor="#FFFFFF"><table border=0 cellpadding=0 cellspacing=0 width="100%"> <tbody> <script language="javascript">print2()</script> <tr> <td width="100%"> <table bgcolor=#EEEEEE border=0 cellpadding=3 cellspacing=0 width="100%"> <tbody> <tr> <td class=f1 id=thetd width="100%"> <p>[<a href="index.html">目录</a>][<a href="g03.htm">上一页</a>][<a href="g05.htm">下一页</a>]</p> <p align="center"><b>第四章 WindowsGDI、控件和突发奇想</b></p> <p> 本章是纯粹的Windows编程内容的最后一章。我们将详细讨论使用图形设备接口界面的内容。内容包括绘制像素、线和简单的几何开关。然后我们简略讨论一下定时方法,以Windows的子控件来结束Windows编程内容。最后简要介绍一下T3D游戏控制台模板程序,在本书后面所有内容中将该模板程序作为所有演示的开始。下面列出了本章涉及的主要内容:<br> ·高级GDI编程、笔、画刷和渲染<br> ·子控件<br> ·系统定时函数<br> ·传递消息<br> ·获取消息<br> ·T3D游戏控制台</p> <p> <b>高级GDI图形</b></p> <p> 我曾经提到过,GDI和DirectX相比太慢了。但是GDI在各方面都很优秀,并且是Windows系统内置的渲染引擎,也就是说,如果想创建任何工具或标准的GDI应用程序了解关于GDI的工作方式是很有益处的,而了解如何将GDI和DirectX混全合一起使用则是使用GDI功能来模拟DirectX程序中未能实现的函数一种好方法。因此GDI可以在编写游戏程序演示功能时作为一种速度较慢的软件仿真,至少你还可以了解GDI的内容。<br> 下面我们来讨论一下一些基本的GDI操作,还可以通过浏览Win32 SDK来了解更多的GDI内容,在本书中可以学到一些基本的技巧,而不是GDI的每一个功能。这就像看一个计算机分销商促展览——看到了一个,也就看到全部。</p> <p><b>图形设备描述表</b></p> <p> 在第三章“高级Windows编程中”,可以经常看到设备描述表的类型句柄,或者是HDC即表示设备描述表的句柄的数据类型。这里设备描述表是一个图形设备描述表类型,当然还有其他的设备描述表,如打印机设备描述表。无论怎样讲,可能都对什么是图形设备描述表,以及图形设备描述表到底代表什么意思而感到疑惑不解。这都是很好的问题。<br> 一个图形设备描述表实际上就是对一种安装在系统中的视频图像卡的描述。因此,当访问一个图形设备描述表或句柄时,实际上就表示安装在计算机系统上的视频卡具体描述及其分辩率和色彩容量。对于使用GDI的任何图形调用,该信息都是必须的。从本质上说,你所提供的指向任何GDI函数的HDC句柄,都用来访问一个函数需要操作的视频系统的重要信息。这就是需要一个图形设备描述表的原因所在。<br> 图形设备描述表跟踪编程过程中可能改变的软件设置。例如,GDI使用大量的图形对象,如笔、画刷、线和类型等等。GDI使用上述基本数据描述来绘制任何一种图元。因此尽管当前画笔颜色是你设置的某种颜色,并且也不是视频卡的默认颜色,但是图形设备描述表仍然跟踪它。因此,图形设备描述表不仅是视频系统的硬件描述,而且还是记录和保存设置的信息库,由此你的GDI函数调用能够使用这些设置,而不是和这些调用一起发送。这样可以保存GDI调用的大量参数。下面让我们看一下如何使用GDI对图形渲染。</p> <p><b>色彩、画笔和画刷</b></p> <p> 如果认真考虑的话,能够在计算机屏幕上绘制的对象的类型并没有多少。当然绘制图形的形状和颜色有无穷多种,但对象的类型是很有限的。这些对象就是点、线和矩形。其他的任何东西都是这些基本图元对象类型的组合。<br> GDI所采用的这种方法有点像一个画家。一个画家使用颜色、画笔和画刷来绘画——我们也是这样。GDI以相同的方式工作,并且还有下面的定义:<br> ·<b>画笔</b>——用于画线条和轮廓,具有颜色、粗细和线型。<br> ·<b>画刷</b>——用于填充任何闭合的对象,具有颜色、样式、甚至可以是位图、图4.1绘出了一个详细的标签。</p> <p>-------------<br> -------------</p> <p> 在我们具体接触画笔和画刷以及实际使用它们之前,必须先了解GDI的情况。GDI一般一次只使用一个画笔和一个画刷。在你的系统配置中可以有许多画笔和画刷,但是在当前图形设备描述表中每次只有一个画笔或画刷被激活。这样就必须为图形设备描述表选择对象,以便于使用。<br> 请记住,图形设备描述表不仅是一个视频卡及其工作的描述,而且还是当前绘制工具的描述。画笔和画刷是该设备描述表跟踪的工具中的主要的样本,并且必须从该图形设备描述表中或之外选择这些工具。该过程称之为选定。当程序运行时,将选定一个新的画笔,然后选择画笔输出,也可能选定不同的画刷并且选择画刷输出等等。应当记住的是一旦该内容中选定了一个绘图对象,就要一直使用该对象,直到改变对象为止。<br> 最后,无论何时创建了一个新的画笔和画刷,在完成绘制图形之后必须删除该画笔或画刷。这是非常重要的,因为Windows GDI关于画笔和画刷句柄就有如此之多的存取窗口,通常学会GDI几乎要耗尽精力,但我们一会儿就可以学会,好,现在我们首先讨论画笔,然后是画刷。</p> <p><b>使用画笔</b></p> <p> 画笔句柄称这为<b>HPEN</b>。下面是如何创建一个NULL画笔:<br> HPEN pen_1 = NULL;<br> pen_1指示一个画笔句柄,但是,pen_1仍然不能使用所希望的信息来替代或删除。该操作可以通过下面两种方法中的一种来完成。 <br> ·使用存储对象<br> ·创建一个用户定义的画笔<br> 请记住,存储对象或者是存储任何东西仅仅是Windows所拥有的一些默认样式的对象。对于画笔,已经有许多已经定义的画笔样式,但是这还是有限的样式。可以使用下面所示的GetStockObject()函数来检索大量的不同的对象句柄,包括画笔句柄、画刷等等。<br> HGDIOBJ GetStockObject(int fnObject);//type of stock object<br> 该函数只采用希望的存储对象的样式,返回一个该对象的句柄,画笔的样式是预选定义的存储对象,如表4.1所示。</p> <p align="center"><b> 表4.1 存储对象样式</b><br> </p> <table width="80%" border="1" cellspacing="0" cellpadding="0" align="center" bordercolorlight="#000000" bordercolordark="#FFFFFF"> <tr> <td width="24%">值</td> <td width="76%">描述</td> </tr> <tr> <td width="24%">BLACK_PEN</td> <td width="76%">黑色画笔</td> </tr> <tr> <td width="24%">NULL_PEN</td> <td width="76%">中空的画笔</td> </tr> <tr> <td width="24%">WHITE_PEN</td> <td width="76%">白色画笔</td> </tr> <tr> <td width="24%">BLACK_BRUSH</td> <td width="76%">黑色画刷</td> </tr> <tr> <td width="24%">DKGRAY_BRUSH</td> <td width="76%">深灰色画刷</td> </tr> <tr> <td width="24%">GRAY_BRUSH</td> <td width="76%">灰色画刷</td> </tr> <tr> <td width="24%">HOLLOW_BRUSH</td> <td width="76%">中空的画刷(相当于NULL_BRUSH)</td> </tr> <tr> <td width="24%">LIGRAY_BRUSH</td> <td width="76%">淡灰色画刷</td> </tr> <tr> <td width="24%">NULL_BRUSH</td>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -