送给初学者的礼物:c++游戏编程起源连载一

上传人:wt****50 文档编号:45833275 上传时间:2018-06-19 格式:PDF 页数:29 大小:453.65KB
返回 下载 相关 举报
送给初学者的礼物:c++游戏编程起源连载一_第1页
第1页 / 共29页
送给初学者的礼物:c++游戏编程起源连载一_第2页
第2页 / 共29页
送给初学者的礼物:c++游戏编程起源连载一_第3页
第3页 / 共29页
送给初学者的礼物:c++游戏编程起源连载一_第4页
第4页 / 共29页
送给初学者的礼物:c++游戏编程起源连载一_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《送给初学者的礼物:c++游戏编程起源连载一》由会员分享,可在线阅读,更多相关《送给初学者的礼物:c++游戏编程起源连载一(29页珍藏版)》请在金锄头文库上搜索。

1、 上学吧() 第 1 页,共 29 页 上学吧为您提供“计算机等级考试”复习资料下载:http:/ 送给初学者的礼物:送给初学者的礼物:C+游戏编程起源连载一游戏编程起源连载一 第一章 Windows 编程基础 简介 本章目的是介绍 WINDOWS 编程基础。在本章结束时,你应该能够很好的工作了,虽燃可能是简单的 WINDOWS 程序。你需要有 C 语言的基础知识,我很少将 C的代码扩充到程序中。当然,由于WINDOWS 本身就是面向对象的,一点类的知识是不会对你有什么损害的。如果你不熟悉 C,没有关系,我想你还是能从我这里学到大部分的东西。所有的程序代码都通过了 MICROSOFT VISU

2、AL C6.0 的编译,如果你还没有合适的编译器,那就用它好了,还是很棒的。开动吧! 多数的 Windows 程序都需要Windows.h和 Windowsx.h 这两个头文件,要确保使用它们。 当然, 你还需要其它的标准的 C 的头文件, 象 stdio.h,conio.h 等。除了这些,你还会经常看到在程序的开始有这样一行代码: #define WIN32_LEANAND_MEAN 它表示 Windows 的头文件中将拒绝接受 MFC 的东西, 这将加速你的build 时间。如果你从没有打算应用 MFC 在你的游戏编程中,那就使篇上学吧() 第 2 页,共 29 页 上学吧为您提供“计算机

3、等级考试”复习资料下载:http:/ 用它吧。如果你以前从没有看过这种声明类型在#define 后,直接加上一个“单词”, 那么它的作用就是有条件编译。 看看下面的例子: #ifdef DEBUG_MODE printf(“Debug mode is active!“); #endif 意思是: 如果程序的开始包含#define DEBUG_MODE, 那么就printf(),否则退出。这个对于你跟踪程序的逻辑错误是很有帮助的。 WinMain()函数 DOS 下的 C 语言从 main()开始,Windows 下的 C 语言从 WinMain()开始,一个空的 WinMain()函数是这样的

4、: int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) return(0); 上学吧() 第 3 页,共 29 页 上学吧为您提供“计算机等级考试”复习资料下载:http:/ 一个函数即使什么也没做,也应该返回一个值。是的,有好多东西我们不熟悉。首先的首先,WINAPI 是个什么声明?WINAPI 是在windows.h 头文件中定义的一个宏,它把函数调用翻译成正确的调用约定。当我们在程序中需要用到汇编语言的时候,我们在来深究它好了,记住,如果要用 Win

5、Main(),就必须要有 WINAPI。 下一步让我们来看看括号里的四个参数: HINSTANCE hinstance:HINSTANCE 是一个句柄类型的标识符。变量 hinstance 是一个整数,用于标识程序实例。Windows 设置这个参数的值,并把它传递给你的程序代码。很多 Windows 函数都要用到它。 HINSTANCE hPreInstance:你不用担心这个参数,它已经被废掉了。它只是为古老的 Windows 版本服务的。你将还会看到类似的情况。 LPSTR lpCmdLine:是一个指向字符串的指针,它仅在程序名是从 DOS 命令行输入或是从 Run 对话框中输入时才起作

6、用。因此,很少被程序代码所用。 上学吧() 第 4 页,共 29 页 上学吧为您提供“计算机等级考试”复习资料下载:http:/ int nCmdShow:决定了窗口在初始显示时的状态。Windows 通常给这个参数分配一个值。通常是 SW_打头的一个常量。例如SW_SHOWNORMAL表 示 默 认 状 态 , SW_MAXINIZE或SW_MINIMIZE 分别表示最大和最小模式等等。 以上大体上是 WinMain()的参数的介绍。下面对变量、参数、常量、类等的命名方法介绍一下。 一、消息 当你在 DOS 下编程的时候,你不必担心其它程序的运行,因为 DOS是独占模式。但你在 Window

7、s 平台上编程时,你不得不考虑其它正在运行的程序。鉴于此,Windows 通过“消息”来连接操作申请和具体操作。简单的说,就是我们指示程序或程序本身向 Windows 发出诸如移动窗口、放大窗口、关闭窗口等申请,Windows 再根据申请,考察实地情况,拒绝或发出指令,让程序(计算机)作出相应的动作。再例如,鼠标随时向 Windows 发出消息,汇报光标位置,左键或右键是否按下等,Windows 再根据消息作出相应的反应。总之,无论何时,Windows 都要随时掌控所有的消息,而且,Windows 是一直不断地接收到各种消息。 上学吧() 第 5 页,共 29 页 上学吧为您提供“计算机等级考

8、试”复习资料下载:http:/ 这种功能是通过一种被命名为 CALLBACK 函数类型实现的。 不用害怕,消息传递来传递去都是由 Windows 自己完成的,你只要声明一个CALLBACK函数就可以了, 就像WINAPI用在WinMain()前一样。如果还没有明白,不要紧,往下看你就明白了。现在,我要离开这个话题一会儿,因为你只有先建立窗口(Windows),传递消息才有可能实现。 二、窗口类 现在谈论一点 C的知识,因为要想建立一个窗口,你就得先建立一个窗口类。窗口类包含所有的有关窗口的信息,如用什么样的鼠标符号,菜单样式等等。开发任何一个窗口程序,都离不开窗口类的建立。为了达到此目的,你必

9、须填写 WNDCLASSEX 结构。EX 的意思是“扩充”的意思,因为有一个老的结构叫作 WNDCLASS,这里,我们将使用 WNDCLASSEX 结构,它的样子如下: typedef struct _WNDCLASSEX UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; 上学吧() 第 6 页,共 29 页 上学吧为您提供“计算机等级考试”复习资料下载:http:/ HICON hIcon; HCURSOR hCursor; HBRUSH hbrBac

10、kground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm; WNDCLASSEX; 这个结构有不少成员,讨厌的是,你必须为窗口类设置每一个成员。莫发愁,纸老虎一个。让我们来个速成。 UINT cbSize:指定了以字节为单位的结构的大小。这个成员是通过 sizeof(WNDCLASSEX)实现的。 你将会经常看到它, 尤其是你使用了 DirectX。 UINT style:指定了窗口的风格。它经常被以 CS_打头的符号常量定义。两种或两种以上的风格可以通过 C 语言中的“或”(|)运算符加以组合。 大多数情况我们只应

11、用四种风格, 出于对文章长度的考虑,我们只列出这四种。若你还需要其它的,到 MSDN 里找一下好了。当然前提是你使用的是 Visual C。 上学吧() 第 7 页,共 29 页 上学吧为您提供“计算机等级考试”复习资料下载:http:/ CS_HREDRAW:一旦移动或尺寸调整使客户区的宽度发生变化,就重新绘制窗口。 CS_VREDRAW:一旦移动或尺寸调整使客户区的高度发生变化,就重新绘制窗口。 CS_OWNDC: 为该类中的每一个窗口分配一个唯一的设备上下文。 CS_DBLCLKS:当用户双击鼠标时向窗口过程发送双击消息。 WNDPROC lpfnWndProc:是指向窗口过程的指针。一

12、般都指向CALLBACK 函数。如果你没有用过函数指针,简单理解为函数的地址就是函数的名字,名字后面别带括号。 int cbClsExtra: 它是为类保留的额外信息 。 大多数程序员不用它,你在在写游戏程序时也不太可能用它,所以,设为 0 好了。 int cbWndExtra:同上一个差不多,设为 0 好了。 HANDLE hInstance:是指向窗口过程实例的句柄。同时也是上学吧() 第 8 页,共 29 页 上学吧为您提供“计算机等级考试”复习资料下载:http:/ WinMain()函数的参数之一。应该设置为 hinstance。 HICON hIcon:指向窗口图标的句柄,它通常被

13、 LoadIcon()函数设置。在你学会如何在你的程序中使用资源前,你先设置成如下样子:LoadIcon(NULL,IDI_WINLOGO)。当然,还有一些其它的 IDI_打头的符号常量,可以自己去帮助文件里寻找。 HCURSOR hCursor:指向窗口光标的句柄,它通常被 LoadCursor()函数设置,在你学会如何在你的程序中使用资源前,你先用Windows 默认的吧,LoadCursor(NULL,IDC_ARROW)。 HBRUSH hbrBackground: 当你的窗口过程得到消息, 要求刷新 (或重画)窗口时,至少要用一种纯色或“brush”(画刷)重画窗口区域,画刷是由参数

14、确定的。你可以使用 GetStockObject()函数调用几种常备的画刷, 如 BLACK_BRUSH, WHITE_BRUSH, GRAY_BRUSH 等。现在,你就用 GetStockObject(BLACK_BRUSH)吧。也许你觉得我说的太简单了,是因为不想把开始弄得太复杂。在以后的篇幅里会详细讲述的。 LPCTSTR lpszMenuName: 如果你想建立一个有下拉菜单的窗口,你得给这个参数赋一个菜单名称(这涉及到资源),由于你还不知道怎么创建菜单,你就先用 NULL 设置成一个没有菜单的窗口吧。 上学吧() 第 9 页,共 29 页 上学吧为您提供“计算机等级考试”复习资料下载:http:/ LPCSTR lpszClassName: 很显然, 你需要给类起个名字, 随你便,如“*”。要用双引号引上。 HICON hIconSm:指向小图标的句柄。小图标用来显示在窗口的标题栏里。要用到 LoadIcon()函数,现在,先用 Windows 默认的吧,LoadIcon(NULL,IDI_WINLOGO)。 好了,现在你关于 WNDC

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号