游戏编程导论 Chapter-02_第1页
游戏编程导论 Chapter-02_第2页
游戏编程导论 Chapter-02_第3页
游戏编程导论 Chapter-02_第4页
游戏编程导论 Chapter-02_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第2章 了解Windows编程 内容提纲 2.1 Visual C+编程方式2.2 Windows程序设计基本概念2.3 事件驱动及消息机制 2.3.1 Windows中的事件驱动 2.3.2 Windows 应用程序中常见消息2.4 Windows窗口的生成 2.4.1 指定窗口特征 2.4.2 注册窗口类并创建窗口2.5 Windows程序创建及程序框架分析2.6 修改程序图标和光标 第2章 了解Windows编程Windows编程实际上就在Windows框架下对Windows API的调用。Windows游戏编程对学习者的知识背景要求:具备基本的C+语言知识;对Windows程序的运行机

2、制和VC+的编程方式有一定了解。了解Visual C+ 2008集成开发环境的使用。2.1 Visual C+编程方式使用Visual C+编写Windows程序可以有两种方式:直接调用Windows API,游戏开发一般采用这种方式;应用程序中要完成某个功能,都是以函数调用的形式实现的;把仅使用Windows API来编写Windows应用程序的开发方式叫做“SDK编程”。MFC(Microsoft Foundation Class Library,微软基础类库)方式MFC是由Microsoft提供的对Windows API封装后的类库;用户根据编程需要调用相应的类,或根据需要自定义有关的类

3、。2.2 Windows程序设计基本概念1. Windows数据类型微软对一些C/C+的基本数据类型进行了封装,定义了新的名称。2. 窗口窗口是Windows程序的基本操作单元,是应用程序与用户之间交互的接口环境,例如输入输出操作等等。窗口的特性是由一个WNDCLASS结构体进行定义的。一个完整的窗口具有许多特征,包括光标(鼠标进入该窗口时的形状),图标,菜单,背景色等。3. 实例指已加载到内存中运行的程序,或者说可执行程序运行后在内存中的一个拷贝。4. 资源所有Windows的规范组件以及位图等都可以是被程序所使用的资源,例如:菜单、图标、对话框、菜单、按钮等等。2.2 Windows程序设

4、计基本概念5. 对象与句柄对象可以是任何Windows的规范组件,例如窗口、菜单、按钮、对话框或程序模块等。句柄是指Windows使用的一个唯一的整数值,用于标识应用程序中不同的对象和同类对象中不同的实例。句柄又可以细分成: 图标句柄(HICON)光标句柄(HCURSOR) 窗口句柄(HWND)应用程序实例句柄(HINSTANCE)其它常用句柄: HDC(当前设备环境句柄)HBITMAP(位图句柄) HFONT(字体句柄)MENU(菜单句柄) HBRUSH(画刷句柄)HPEN(画笔句柄) HFILE(文件句柄)2.2 Windows程序设计基本概念6.图形设备接口(Graphics Devic

5、e Interface,GDI)GDI负责系统与用户或绘图程序之间的信息交换,并且控制输出设备上的图形或者文字的显示;使用GDI,程序员可以不需要考虑硬件设备操作的细节;从Windows2000以后,GDI升级为GDI+;与GDI相比,GDI+不仅对其进行了优化,而且还增加了许多新特性:渐变画刷(Gradient Brushes)透明混合(Alpha Blending)多种图片格式支持,包括BMP、GIF、JPEG、PNG、TIFF、ICON、WMF等格式。7. 回调函数回调函数是一个通过函数指针调用的函数。回调函数这种机制将函数的提供者和其实现者进行分离。回调函数一般用于消息截获、系统信息获

6、取或异步事件处理2.3 事件驱动及消息机制Windows程序以消息为基础,以事件来驱动。Windows程序设计主要是围绕事件处理、编写消息响应函数。2.3.1 Windows中的事件驱动Windows程序中有一个消息循环,用来接收消息和处理相应消息。消息处理函数有:GetMessage()函数从应用程序消息队列中取走一条消息,该函数的原型如下:TranslateMessage()函数对取到的消息进行转换:当用户按下某个键,系统将发出WM_KEYDOWN、WM_KEYUP,并且参数中提供了该键的虚拟扫描码。转换过程不影响原来的消息,只会在消息队列中增加新消息。DispatchMessage()函

7、数将取到的消息传给窗口回调函数处理:该函数通知操作系统去调用窗口的回调函数来处理收到的消息。2.3 事件驱动及消息机制2.3.2 Windows 应用程序中常见消息标准Windows消息以WM_开头。1. 鼠标消息WM_LBUTTONDOWN 按下鼠标左键 WM_MBUTTONDBLCLK 双击鼠标中键 WM_LBUTTONUP 释放鼠标左键 WM_RBUTTONDOWN 按下鼠标右键 WM_LBUTTONDBLCLK 双击鼠标左键 WM_RBUTTONUP 释放鼠标右键 WM_BUTTONDOWN 按下鼠标中键 WM_RBUTTONDBLCLK 双击鼠标右键 WM_MBUTTONUP 释放鼠

8、标中键 WM_MOUSEMOVE 鼠标移动2.3 事件驱动及消息机制2. 虚拟码与设备有关的键的标识称之为扫描码,而与设备无关的键的标识称之为虚拟码;虚拟码由Windows系统定义,发送键盘消息时,其值就存放在wParam参数中,以标识哪一个键被按下或释放。VK_LBUTTON 鼠标左键VK_RBUTTON 鼠标右键VK_MBUTTON 鼠标中键VK_LEFT 左箭头键VK_RIGHT 右箭头键VK_UP 上箭头键VK_DOWN 下箭头键VK_SPACE 空格键VK_RETURN 回车键VK_CONTROL Ctrl键VK_PAUSE Pause键VK_ESCAPE Esc键2.3 事件驱动及

9、消息机制3. 键盘消息键盘分成两类,即按键消息和字符消息。当用户按下或松开一个键时,就产生了一个按键消息。按键消息又可以分为系统按键消息和非系统按键消息。当一个按键的组合产生了一个可以显示的字符时,就产生了一个字符消息。字符消息也可以分为系统字符消息以及非系统字符消息。2.3 事件驱动及消息机制4.其它消息1)WM_CLOSE:关闭窗口时产生的消息;2)WM_QUIT:退出程序关闭消息循环时产生的消息,该消息一般由PostQuitMessage函数发出;WM_PAINT:重画消息当用户区发生移动或显示事件、用户窗口改变大小事件或程序通过滚动条滚动窗口时,均产生一条WM_PAINT消息。此外,当

10、下拉式菜单关闭并需要恢复被覆盖的部分以及Windows清除对话框或消息框等对象,并需要恢复被覆盖的部分时,都将产生WM_PAINT消息;4)WM_CREATE:窗口在创建时发送的消息;5)WM_SETFOCUS:窗口获得焦点时发送的消息;6)WM_KILLFOCUS:窗口失去焦点时发送的消息;7)WM_ACTIVE:窗口被激活时发送的消息;8)WM_DESTROY:关闭程序时发送的消息;WM_TIMER:定时器消息使用SetTimer设置定时器后,如果SetTimer函数的最后一个参数设为NULL,那么系统根据设置的时间间隔向程序的消息队列发送WM_TIMER消息,直到使用KillTimer释

11、放定时器为止。2.3 事件驱动及消息机制5. MSG结构体的定义消息数据是一个MSG结构体类型。MSG结构体的定义如下:typedef struct tagMSGHWNDhwnd;UINT message;WPARAM wParam;LPARAM lParam;DWORDtime;POINT pt; MSG;2.4 Windows窗口的生成2.4.1 指定窗口特征窗口特性由WNDCLASS结构体定义:typedef struct _WNDCLASS UINT style; /窗口类的样式,一般设置为0WNDPROC lpfnWndProc; /指向窗口回调函数的函数指针int cbClsExt

12、ra; /分配在窗口类结构后的字节数int cbWndExtra; /分配在窗口实例后的字节数HINSTANCE hInstance; /定义窗口应用程序的实例句柄HICON hIcon; /窗口的图标HCURSOR hCursor; /窗口的光标HBRUSH hbrBackground; /窗口的背景刷LPCWSTR lpszMenuName; /窗口的菜单名LPCWSTR lpszClassName; /窗口名 WNDCLASS; 2.4 Windows窗口的生成还有一个与WNDCLASS结构体类似的结构体:WNDCLASSEX,它是WNDCLASS结构体的扩展定义。它的定义如下:type

13、def struct UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm; WNDCLASSEX, *PWNDCLASSEX;2.4 Windows窗口的生成2.4.2 注册窗口类并创建窗口RegisterClass()函数来注册窗口CreateWindow()函数产生指定类型的窗口,其定义如下:HWND CreateWindow(LPCTSTR lpClassName, / 窗口名LPCTSTR lpWindowName,/ 窗口标题名称DWORD dwStyle, / 窗口样式int x, / 窗口左上角横坐标int y, / 窗口左上角纵坐标int nWidth, / 窗口宽度int nHeight, / 窗口高度HWND hWndParent, / 该窗口的父窗口句柄HMENU hMenu, / 窗口

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论