⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g03.htm

📁 一本介绍如何开发游戏,如何进行游戏编程的非常值得一看的好书.
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<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="g02.htm">上一页</a>][<a href="g04.htm">下一页</a>]</p>            <p align="center"><b>第三章 高级Windows编程</b></p>            <p>  在火箭专家看来,Windows编程当然算不上什么大工程。但Windows编程很绝的地方在于,你不用了解太多细节,就可以完成很多工作。因此,我们在本章中将主要讨论开发一个完整的Windows应用程序所需要的一些最重要的内容。本章主要内容有:<br>                ·使用资源(如图标、光标和声音)<br>                ·菜单<br>                ·基本的图形设备接口和视频系统<br>                ·输入设备<br>                ·传递消息<br>            </p>            <p><b>使用资源</b></p>            <p>  Windows创建者提出一个主要设计目标就是,在一个Windows应用程序中除程序代码外还能储存更多的资源(甚至Mac程序也是如此)。他们认为一个程序的数据也能够驻留在该程序的.EXE文件中。这是个不错的想法,因为:<br>                ·同时含有代码和数据的.EXE文件更容易分配。<br>                ·如果没有外部数据文件的话,就会丢失这些数据。<br>                · 外部强制转移不会很容易地访问、任意删改、添加、和分配你的数据文件(例如,.BMP文件、.WAV文件等等)。<br>                要满足这种数据库技术,Windows程序支持该种功能,称之为资源。这只是与你的程序代码结合在一起的数据的一小部分,这部分数据在以后的运行过程中可被程序本身加载。图3.1解释了这个概念。</p>            <p>图3.1(略)</p>            <p>  那我们讨论的是哪一种资源呢?实际上对于想编译进程序中的数据类型并没有什么限制,因为Windows程序支持用户定义的资源类型。但是应当注意几种预定义的类型:<br>                ·图标——小位图图形,可以用于许多方面,例如单击该图形运行一个目录下的一个程序。图标使用.ICO文件扩展名。<br>                ·光标——一个表示鼠标指针的位图。Windows允许以各种方式操作光标。例如,可以令光标在窗口之间移动时变换。光标使用.CUR文件扩展名。<br>                ·字符串——字符串资源对于作为一种资源来讲可能是最不明显的了。可以这样说:“我经常将字符串添加到我的程序中或者一个数据文件中。”我知道你的意思。然而,Windws允许将一个字符串表作为一种资源放到你的程序中,并且通过标识符来访问它们。<br>                ·声音——大部分Windows程序至少都可以通过.WAV文件来使用声音。因此,.WAV文件也是一种资源。<br>                ·位图——这是标准的位图,可以是单色、4位、8位、16位或32位格式的像素矩阵。在图形操作系统(如Windows)中是非常常用的对象,因此也可以将位图作为一种资源。位图使用.BMP文件扩展名。<br>                ·对话框——对话框在Windows中也非常常用,设计者可以让对话框作为一种资源,而不是在外部装载的东西。好主意!因此,你可以在程序中创建对话框,也可以将它们设计为一个编辑器,作为一种资源来存储。<br>                ·图元文件——图元文件相对高级。它们允许将一个图像操作作为一个序列记录在一个文件中,然后再回放它。<br>                现在你已经了解了资源的定义以及形式,下一步就是如何将它们一起使用。好!有一个资源编译器的程序,可以以一个扩展名为.RC的ASCI文本资源文件输入。该文件是一个C/English文件——描述了编译到一个数据文件中的所有资源。该资源编译器装载所有的资源,以.RES的扩展名形式将所有资源放置在一个大数据文件中。<br>                这个.RES文件包含了你在.RC文件中定义的诸如图标、光标、位图、声音等所有资源的二进制数据。该.RES文件和.CPP、.H、.LIB、.OBJ等等文件一样都可以编译成一个.EXE文件,这就已经足够了!图3.2显示了该过程的数据流程的可能性。</p>            <p><b>集合资源</b></p>            <p>  以前可以使用一个外部资源编译器,如RC.EXE将所有的资源编译到一起。但是现在可以使用编译器IDE来做这些工作。因此,如果在程序中添加一种资源的话,可以简单地通过IDE中的“文件”菜单中选择“新建”按钮(大多数情况下),然后选择想要添加的资源类型(的面将详细讨论)来添加资源。<br>                让我们回顾一下如何处理资源:可以向程序中添加许多数据类型和对象,然后它们以资源的形式和实际程序代码一起驻留在.EXE文件中(一般在文件的末尾某处).在运行过程中,可以访问这个资源数据库,并且可以从程序本身(而不是作为一个单独的文件从磁盘中)装载资源数据.要创建该资源文件,必须有一个以ASCⅡ文本形式的资源描述文件,名称为.RC。然后将该文件传递到编译器中(一起访问该资源),并且产生一个.RES文件。然后将该.RES文件和所有的其他程序对象连接到一起,创建一个最终的.EXE文件。就这么简单!好,这样我就变成了一个亿万富翁了。<br>                记住上述所有内容,下面就让我们讨论一下众多的资源对象,学会如何创建并装载到程序中。我就不再重复上面提到过的所有的资源,但是你应当能够指出任何其他的信息对象。它们都以相同的方式运行,产生或采用一个数据类型、句柄或熬一个通宵不休息的精神插曲。             </p>            <p><b>使用图标资源</b></p>            <p>  使用资源只需要创建两个文件:一个是.RC文件,如果想在.RC文件中对符号标识符进行标注的话,可能还需要创建一个.H文件。下面内容中将详细讨论。当然,最后还需要产生一个.RES文件,但是我们让IDE编译器来做这个工作。<br>                作为一个创建图标资源的例子,让我们看一下如何改变任务栏上的应用程序使用的图标以及窗口本身的系统菜单的图标。如果你还记得的话,我们在Windows类的创建过程中使用下面代码设置过这些图标:<br>                winclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);<br>                winclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION);<br>                这两行代码为这些普通图标和小版本的图标加载默认的应用图标程序。实际上可以通过使用已经编译到一个资源文件中的图标,将所需要的图标装载到这些存取窗口中。<br>                首先需要一个图标,我已经创建了一个很酷的图标用于本书中所有的应用程序。该图标名为T3DX.ICO,如图3.3所示。我使用了VC++5.0的图形编辑器(如图3.4所示)创建了该图标。当然你可以使用任何你想使用的程序(只要该程序支持该种输出类型)来创建图标、光标和位图等等。<br>                图3.3 T3DX.ICO图标位图(略)<br>                T3DX.ICO是一个32像素×32像素,16位色彩。图标可以安排在16×16到64×64的区域内,最高可以达到256色彩。但是大多数图标都是32×32以及16色彩的,我们也采用这种格式。<br>                一旦你有了感兴趣的、需要放入一个资源文件中的图标,就需要创建一个资源文件来放置该图标。为了简单起见,需要人工编写。(请记住,IDE编译器完全可以做这些工作,但是那样的话,你就什么也学不到了,不是吗?)<br>                .RC文件包含所有资源的定义,也就是说在程序中可以使用多种资源。<br>                注意:在编写任何代码之前,我想指出关于资源的非常重要的一点,Windows可以使用ASCII文本字符串或者是整数标识符来引用资源。在大多数情况下,你可以在.RC文件中同时使用这两种方式,但是应当注意一些资源只允许使用其中的一种。无论是哪种情况,资源必须以稍微不同的方式来加载,并且如果到标识符的话,在你的工程中必须包含一个另外的符号前后对照的.H文件。<br>                下面是如何在.RC脚本文件中定义一个ICON资源:<br>                方法Ⅰ——使用字符串名<br>                icon_name ICON FILENAME.ICO<br>                例如:<br>                windowicon ICON star.icon<br>                MyCoolIcon ICON cool.ico<br>                或者是<br>                方法Ⅱ——通过整数标识符<br>                icon_id ICON FILENAME.ICO<br>                例如:<br>                windowicon ICON star.ico<br>                124 ICON ship.ico<br>                这是令人混乱的地方:注意方法Ⅰ中根本没有任何注解。这就是个问题了,容易给你带来麻烦,因此要仔细听。应当能注意到:ICON定义的每一种方法的第一个例子看上去完全一样。但是,一个理解为“windowicon”,而另一个符号windowicon。这样就导致在.RC文件中必须包含一个附加文件,来定义符号常量。当资源编译器解析下面代码时,<br>                windowicon ICON star.ico<br>              资源编译器首先看一下已经在iclude头文件定义的符号。如果该符号存在,资源编译器就通过整型标识符来引用该符号所指向的资源。否则,资源编译器就假定它是个字符串,通过字符器“windowicon”来引用ICON。<br>                因此,如果想在.RC资源脚本中定义符号ICON的话,也需要一下.H文件来解析该符号索引。要想在.RC脚本中包含.H文件,应当使用标准C/C++#include描述符。<br>                例如,假定你想在.RC文件RESOURCES.RC中定义三个符号图标,同是也需要一个.h文件RESOURCES.H。下面是每个文件的内容:<br>                RESOURCES.H的内容:<br>                #define ID_ICON1 100 //these numbers are arbitrary<br>                #define ID_ICON2 101<br>                #define ID_ICON3 102</p>            <p>  RESOURCES.RC的内容:<br>                #include &quot;RESOURCES.H&quot;<br>                //here are the icon defines,note the use of C++ comments<br>                ID_ICON1 ICON star.ico<br>                ID_ICON2 ICON ball.ico<br>                ID_ICON3 ICON cross.ico<br>                就是这样。然后可以将RESOURCES.RC添加到你的工程中,确认应用程序文件中有#include RESOURCES.H,然后你就大功告成了。当然,.ICO文件必须放在工程的工作目录下,以便于资源编译器能够找到它们。<br>                如果没有为图标定义(#define)符号,也没有包含一个.H文件,资源编译器将只能假定符号ID_ICON1、ID_ICON2和ID_ICON3是字符串。然后就是如何在程序“ID_ICON1”、“ID_ICON2”、“ID_ICON3”中引用它们。<br>                我已经完全打乱了所论及问题的时间/空间连续性,让我们回顾一下想做的工作——仅仅是加载一个简单的图标。<br>                要想通过字符串名来装载一个图标,按下面步骤进行:<br>                在.RC文件中:<br>                your_icon_name ICON filename.ico<br>                在程序代码中:<br>                //Notice the use of hinstance instead of NULL。<br>                Winclass.hIcon = LoadIcon(hinstance,&quot;your_icon_name)&quot;;(注://原文如此)<br>                Winclass.hIconSm = LoadIcon(hinstance,&quot;your_icon_name)&quot;;<br>                要通过符号参考来装载,可以如前面例子#include那些包含符号参考的头文件。</p>            <p>   在.H文件中:<br>                #define ID_ICON1 100 //these numbers are arbitrary<br>                #define ID_ICON2 101<br>                #define ID_ICON3 102</p>            <p>   在.RC文件中:<br>                //here are the icon defines,note the use of C++ comments<br>                ID_ICON1 ICON star.ico<br>                ID_ICON2 ICON ball.ico<br>                ID_ICON3 ICON cross.ico</p>            <p>  程序代码可以像下面一样:<br>                //Notice the use of hinstance instead of NULL。<br>                //use the MAKEINTRESOURCE macro to reference<br>                Winclass.hIcon = LoadIcon(hinstance,MAKEINTRESOURCE(ID_ICON1));<br>                Winclass.hIconSm = LoadIcon(hinstance,MAKEINTRESOURCE(ID_ICON1));<br>                注意宏MAKEINTRESOURCE()的使用。该宏将整数转换为一个字符串指针,但是不必担心该操作——只在使用已经#define的符号常数时应用它。</p>            <p><b>使用光标资源</b></p>            <p>  光标资源几乎和图标资源相同。光标文件是一个小位图,扩展名为.CUR,可以在大多数IDE编译器中创建,或者使用单独的图像处理程序来创建。光标通常是32×32以及16位色彩的,最高可达64×64以及256色彩,甚至可以采用动画。<br>                假定已经使用IDE或一个单独的绘图程序创建了一个光标文件,将它们添加到.RC文件中以及通过程序来访问它们的步骤和图标的情况相似。要定义一个光标,使用.RC文件中的光标关键字。<br>                方法Ⅰ——通过字符串<br>                cursor_name CURSOR FILENAME.CUR<br>                例如:<br>                windowcursor CURSOR crosshair.cur<br>                MyCoolCursor CURSOR greenarrow.cur<br>                或者是<br>                方法Ⅱ——通过整型标识符<br>                cursor_id CRUSOR FILENAME.CUR<br>                例如:<br>                windowcursor CURSOR bluearrow.cur<br>                292 CURSOR redcross.cur<br>                当然,如果想使用符号标识符,必须创建一个.H文件以及符号的定义。<br>                RESOURCES.H的内容:<br>                #define ID_CURSOR_CROSSHAIR 200//these mumbers are arbitrary<br>                #define ID_CURSOR_GREENARROW 201</p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -