VC++ Win32 API 编程简介及游戏开发.ppt
《VC++ Win32 API 编程简介及游戏开发.ppt》由会员分享,可在线阅读,更多相关《VC++ Win32 API 编程简介及游戏开发.ppt(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、VC+win32 API 游戏开发游戏开发VC+win32 API 游戏开发游戏开发l1.Windows 编程编程l2.Windows应用程序的组成与编程应用程序的组成与编程l3.游戏实现原理与游戏实现原理与Window GDI绘图绘图l4.游戏实例的剖析游戏实例的剖析1.Windows编程编程l1.1 Windows API编程基础编程基础l1.2 窗口窗口l1.3 事件驱动事件驱动l1.4 句柄句柄l1.5 消息消息l1.6 Windows应用程序的常用消息应用程序的常用消息1.1 Windows API编程基础编程基础lWindows编程的方法主要有两种方法:编程的方法主要有两种方法:l
2、传统编写法:利用传统编写法:利用API函数。函数。l交互式方法:利用交互式方法:利用MFC类库。类库。l为使程序员编写具有为使程序员编写具有Windows风格的应用程序,风格的应用程序,Windows提供了一个应用程序编程接口提供了一个应用程序编程接口(Application Programming Interface,简称,简称API),它是,它是Windows系统与系统与Windows应用程序间的标准程序接口。应用程序间的标准程序接口。l上千个上千个API函数包含了各种窗口类和系统资源。函数包含了各种窗口类和系统资源。lAPI可以为应用程序提供可以为应用程序提供windows系统特殊函数及
3、数系统特殊函数及数据结构。据结构。lwindows应用程序可以利用大量应用程序可以利用大量API函数调用系统功函数调用系统功能。能。MFClMFC,Microsoft Foundation Class Library,微软基础类库,约有,微软基础类库,约有200个类。个类。lMFC封装了大部分封装了大部分API函数,并提供了一个应函数,并提供了一个应用程序框架,简化了和标准了用程序框架,简化了和标准了windows程序设程序设计。计。l但但Windows API编程方法始终是编程方法始终是windows编编程的基础。程的基础。1.2 窗口窗口l编写一个编写一个Windows应用程序首先应创建一
4、个应用程序首先应创建一个或多个窗口,而后应用程序的运行过程即是窗或多个窗口,而后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。行数据处理与数据交换的过程。1.3 事件驱动事件驱动lWindows程序设计是针对事件或消息的,它程序设计是针对事件或消息的,它的执行顺序取决于事件发生的顺序。的执行顺序取决于事件发生的顺序。l在在Windows环境下,应用程序启动后,系统环境下,应用程序启动后,系统等待用户在图形用户界面内的输入选择,如鼠等待用户在图形用户界面内的输入选择,如鼠标按键、键盘按键、窗口被创建、关闭、改变
5、标按键、键盘按键、窗口被创建、关闭、改变大小、移动等,对系统来说,这都是事件,都大小、移动等,对系统来说,这都是事件,都会产生相应的会产生相应的windows消息。消息。l事件驱动编程方法对于编写交互式程序很有用事件驱动编程方法对于编写交互式程序很有用处,它避免了死板的操作模式。处,它避免了死板的操作模式。1.4 句柄句柄l句柄,顾名思义,指的是一个句柄,顾名思义,指的是一个windows对象的对象的把柄。把柄。lWindows中的句柄都是中的句柄都是32位的指针变量,用位的指针变量,用来指向某个来指向某个windows对象所占据的内存区。对象所占据的内存区。l句柄的使用,极大地方便了句柄的使
6、用,极大地方便了Windows管理其管理其内存中的各种内存中的各种windows对象。对象。常用句柄类型及其说明常用句柄类型及其说明句柄句柄说明说明句柄句柄说明说明HWND窗口句柄窗口句柄HDC设备环境句柄设备环境句柄HBITMAP位图句柄位图句柄HCURSOR光标句柄光标句柄HICON图标句柄图标句柄HFONT字体句柄字体句柄HMENU菜单句柄菜单句柄HPEN画笔句柄画笔句柄HFILE文件句柄文件句柄HBRUSH画刷句柄画刷句柄HINSTANCE当前实例句柄当前实例句柄 HLOCAL局部内存对象局部内存对象句柄句柄HGLOBAL全局内存对象全局内存对象句柄句柄1.5 消息消息l消息是描述事件
7、发生的信息。消息是描述事件发生的信息。lWindows应用程序通过消息进行信息交换。应用程序通过消息进行信息交换。l在在Windows中,消息用结构体中,消息用结构体MSG表示,其结构如下:表示,其结构如下:lTypedef struct tagMSGl HWND hwnd;/窗口句柄窗口句柄l UNIT message;/消息号。消息号。l WPARAM wParam;/用于提供消息的附加消息。用于提供消息的附加消息。l LPARAM lParam;/用于提供消息的附加消息。用于提供消息的附加消息。l DWORD time;/指定消息送至队列的时间指定消息送至队列的时间l POINT pt;
8、/指定消息发送时屏幕光标的位置指定消息发送时屏幕光标的位置lMSG;VC+中存在几种系统定义的消息分类,不同的中存在几种系统定义的消息分类,不同的前缀符号经常用于识别消息的分类,如下表所示:前缀符号经常用于识别消息的分类,如下表所示:前缀前缀消息分类消息分类WM表示窗口消息表示窗口消息BM表示按钮控制消息表示按钮控制消息CB表示组合框控制消息表示组合框控制消息DM表示默认下压式按钮控制消息表示默认下压式按钮控制消息EM表示编辑控制消息表示编辑控制消息LB表示列表框控制消息表示列表框控制消息SBM表示滚动条控制消息表示滚动条控制消息1.6 Windows应用程序的常用消息应用程序的常用消息l1.
9、鼠标消息,主要有:鼠标消息,主要有:lWM_LBUTTONDOWN:产生单击鼠标左键的消息。产生单击鼠标左键的消息。lWM_LBUTTONUP:放开鼠标左键时产生的消息。放开鼠标左键时产生的消息。ll2.键盘消息,主要有:键盘消息,主要有:lWM_KEYDOWN:按下一个系统键时产生的消息。按下一个系统键时产生的消息。lWM_KEYUP:放开一个系统键时产生的消息。放开一个系统键时产生的消息。ll3.窗口消息,主要有:窗口消息,主要有:lWM_CREATE:窗口创建时,由窗口创建时,由CreateWindows函数函数发出的消息。发出的消息。lWM_CLOSE:关闭窗口时产生的消息。关闭窗口时
10、产生的消息。lWM_QUIT:退出应用程序时,由退出应用程序时,由PostQuitMessage函函数发出消息。数发出消息。l2.Windows应用程序的组成与编程应用程序的组成与编程l2.1 典型的典型的Windows程序结构程序结构l2.2 入口函数入口函数WinMain()l2.3 窗口函数窗口函数WinProc()l2.4 windows应用程序的常用数据类型应用程序的常用数据类型l2.5 API编程实例编程实例2.1 典型的典型的Windows程序结构程序结构lWindows应用程序的主体由以下两个函数完成:应用程序的主体由以下两个函数完成:lWinMain()函数负责建立窗口和建立
11、消息循环。函数负责建立窗口和建立消息循环。lWinProc()函数负责消息的处理。函数负责消息的处理。2.1 典型的典型的Windows程序结构程序结构WinMain()函数负责函数负责程序开始执行程序开始执行WinProc()函数负责函数负责程序打开窗口程序打开窗口处理消息处理消息程序结束,关闭窗口程序结束,关闭窗口Windows默认处理默认处理应用程序应用程序处理消息处理消息?退出消息退出消息?是是是是否否否否是否有消息?是否有消息?是是否否2.2 入口函数入口函数WinMain()lWinMain()函数类似函数类似C语言中的语言中的Main函数,是函数,是Win32应用程序入口函数。应
12、用程序入口函数。lWinMain()函数主要完成创建主窗口,并产生函数主要完成创建主窗口,并产生和处理消息循环。和处理消息循环。WinMain()函数函数 l因为因为windows是多任务系统,所以同一应用程序的多个窗是多任务系统,所以同一应用程序的多个窗口可能会同时存在。口可能会同时存在。lwindows系统对每个窗口的执行称为一个实例,用一个实系统对每个窗口的执行称为一个实例,用一个实例句柄来唯一标识。例句柄来唯一标识。lWinMain()函数与函数与DOS程序的程序的main()函数起同样的作用,函数起同样的作用,有一点不同的是,有一点不同的是,WinMain()函数必须带有四个参数,它
13、函数必须带有四个参数,它们是系统传递给它的。们是系统传递给它的。lWinMain()函数的原型如下:函数的原型如下:lint PASCAL WinMain(HINSTANCE hInstance,/当前当前实例句柄实例句柄lHINSTANCE hPrevInstance,/前一个实例句柄前一个实例句柄lLPSTR lpCmdLine,/命令行字符命令行字符lint nCmdShow)/窗口显示方式窗口显示方式WinMain()函数函数l第一个参数第一个参数hInstance,是标识该应用程序当前实,是标识该应用程序当前实例的句柄。例的句柄。l第二个参数是第二个参数是hPrevInstance,
14、它是用来标识该应,它是用来标识该应用程序的前一个实例的句柄。用程序的前一个实例的句柄。l第三个参数是第三个参数是lpCmdLine,是指向应用程序命令行,是指向应用程序命令行参数字符串的指针。参数字符串的指针。l最后一个参数是最后一个参数是nCmdShow,是一个用来指定窗口,是一个用来指定窗口显示方式的整数。这个整数值可以是显示方式的整数。这个整数值可以是SW_SHOW、SW_HIDE、SW_SHOWMAXIMIZED、SW_SHOWMINIMIZED等。等。lWinMain()函数主要由函数主要由2部分组成:部分组成:l窗口初始化窗口初始化l消息循环消息循环窗口初始化包括以下主要步骤:窗口
15、初始化包括以下主要步骤:l定义窗口类定义窗口类:通过给窗口类数据结构通过给窗口类数据结构WINDCLASS赋值,赋值,设置窗口类的各种属性。如窗口边框、窗口标题栏文字、设置窗口类的各种属性。如窗口边框、窗口标题栏文字、窗口大小和位置、鼠标、背景色等。窗口大小和位置、鼠标、背景色等。l注册窗口类注册窗口类:Win系统本身提供部分预定义的窗口类,程系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类。窗口类必须先注册后使用。窗序员也可以自定义窗口类。窗口类必须先注册后使用。窗口类的注册由函数口类的注册由函数RegisterClass()实现。实现。l创建窗口实例创建窗口实例:创建窗口类的实例由
16、创建窗口类的实例由CreateWindows()函函数实现。数实现。l窗口显示窗口显示:窗口类的显示是由窗口类的显示是由ShowWindows()函数和函数和UpdateWindows()函数实现的。函数实现的。lShowWindows()函数:应用程序通过调用函数:应用程序通过调用ShowWindows()函数在屏幕上显示窗口。函数在屏幕上显示窗口。lUpdateWindows()函数:显示窗口后,应用程序调用函数:显示窗口后,应用程序调用UpdateWindow更新并绘制用户区,并发出更新并绘制用户区,并发出WM_PAINT消消息。息。消息循环消息循环 lWindows为当前执行的每个为当
17、前执行的每个Windows程序维护一个程序维护一个消息队消息队列列。l在发生输入事件之后,在发生输入事件之后,Windows将事件转换为一个将事件转换为一个消息消息并并将消息放入程序的将消息放入程序的消息队列消息队列中。中。l程序通过执行一块称之为程序通过执行一块称之为消息循环消息循环的程序代码从消息队列的程序代码从消息队列中取出消息。中取出消息。l以下是以下是WinMain()函数中消息循环的代码:函数中消息循环的代码:l/消息循环以调用消息循环以调用GetMessage()开始,它从消息队列中取出开始,它从消息队列中取出/一个消息一个消息lwhile(GetMessage(&msg,NUL
18、L,0,0)l l /将消息将消息msg结构传给结构传给Windows,进行一些键盘转换。,进行一些键盘转换。l TranslateMessage(&msg);l /将该消息发送给窗口消息处理程序进行处理。将该消息发送给窗口消息处理程序进行处理。l DispatchMessage(&msg);lWinMain()函数的大致结构函数的大致结构 lint PASCAL WinMain()ll/定义窗口类:定义窗口类:l WNDCLASS wndclass;l wndclass.style=CS_HREDRAW|CS_VREDRAW;l 十个字段十个字段l wndclass.lpszClassNam
19、e=”Lei”;l/注册窗口类:注册窗口类:l RegisterClass(&wndclass);l/创建窗口:创建窗口:l HWND hwnd;l hwnd=CreateWindow();l/显示及更新窗口:显示及更新窗口:l ShowWindow();l UpdateWindow();l/消息循环:消息循环:l MSG msg;l While(GetMessage(&msg,NULL,0,0)l TranlateMessage(&msg);l DispatchMessage(&msg)l l return msg.wParam;l2.3 窗口函数窗口函数WndProc()l窗口函数窗口函数
20、WndProc()就是就是Windows应用程序的消息应用程序的消息处理程序。处理程序。l窗口函数窗口函数WndProc()定义了应用程序对接收到的不同定义了应用程序对接收到的不同消息的响应,包含了对各种可能接收到的消息的处理消息的响应,包含了对各种可能接收到的消息的处理过程。过程。lWndProc函数由一个或多个函数由一个或多个switch语句组成。每一语句组成。每一条条case语句对应一种消息,当应用程序接收到一个消语句对应一种消息,当应用程序接收到一个消息时,相应的息时,相应的case语句被激活并执行相应的响应程序语句被激活并执行相应的响应程序模块。模块。l窗口消息处理程序不予处理的所有
21、消息被传给名为窗口消息处理程序不予处理的所有消息被传给名为DefWindowProc的的Windows函数进行默认处理。函数进行默认处理。消息处理函数消息处理函数WndProc的大致结构的大致结构 lLRESULT CALLBACK WndProc(HWND hMainwnd,UINT message,WPARAM wParam,LPARAM lParam)/窗口函数的定义窗口函数的定义l switch(message)l case WM_KEYDOWN:/击键消息击键消息l ;l break;l l case:l ;l break;l l l case WM_DESTROY:/关闭应用程序窗
22、口时发出的消息关闭应用程序窗口时发出的消息l PostQuitMessage(0);/发出发出WM_QUIT消息,结束应用程序消息,结束应用程序l return 0;l l default:break;ll /调用缺省消息处理过程调用缺省消息处理过程l return DefWindowProc(hMainwnd,message,wParam,lParam);l2.4 windows应用程序的常用数据类型应用程序的常用数据类型l所有的所有的Windows应用程序中,都有一个程序初始化的过程。应用程序中,都有一个程序初始化的过程。l下面以一个实现最简单功能的程序下面以一个实现最简单功能的程序Win
23、ApiDemo为例,说为例,说明明Windows程序的基本框架。操作步骤如下:程序的基本框架。操作步骤如下:l(1)打开)打开Visual C+6.0。选择选择File菜单的菜单的New,在出现的,在出现的对话框中,选择对话框中,选择Projects栏目(新建工程),并点取其下的栏目(新建工程),并点取其下的Win32 Application项,表示使用项,表示使用Win32环境创建应用程序。环境创建应用程序。l(2)在)在Locatin(路径)中填入工程的路径,然后在(路径)中填入工程的路径,然后在Project Name(项目名称)中填入(项目名称)中填入“WinApiDemo”,其它按照
24、缺省设,其它按照缺省设置,单击置,单击OK按钮。按钮。l(3)选择)选择File菜单的菜单的New,在出现的对话框中,选择,在出现的对话框中,选择Files栏栏目(新建文件),并点取其下的目(新建文件),并点取其下的C+Source File项,表示新项,表示新建一个建一个C+源文件。在右边的源文件。在右边的File栏中输入栏中输入“WinApiDemo”,最后确定让最后确定让Add to project检查框打上勾,单击检查框打上勾,单击OK按钮。按钮。l(4)在)在“WinApiDemo.cpp”文件中输入以下程序代码。文件中输入以下程序代码。2.5 API编程实例编程实例 WinApiD
25、emo.cpp源代码(源代码(1)l#include/头文件头文件lLRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);l/窗口函数声明,这一函数将处理发往应用程序窗口的各种消息窗口函数声明,这一函数将处理发往应用程序窗口的各种消息lchar szClassName=windowclass;/窗口结构体的名称窗口结构体的名称lchar szAppTitle=API建立窗口实例建立窗口实例;/窗口的标题窗口的标题lINT PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC+ Win32 API 编程简介及游戏开发 VC 编程 简介 游戏 开发
限制150内