windows程序设计马课件api_第1页
windows程序设计马课件api_第2页
windows程序设计马课件api_第3页
windows程序设计马课件api_第4页
windows程序设计马课件api_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、1Windows程序设计程序设计马广焜马广焜2第第1讲讲 Windows 应用程序基础应用程序基础3程序调试工具程序调试工具包括源程序语包括源程序语法检查、可执法检查、可执行程序修改和行程序修改和运行监视等运行监视等应用程序应用程序HelpHelp和安装和安装开发工具包开发工具包系统函数库和系统函数库和系统函数开发系统函数开发工具工具资源管理器资源管理器包括图形化窗包括图形化窗口及组成元素口及组成元素的多种对象的的多种对象的编辑器编辑器可选择并构成具体可选择并构成具体语句或源程序结构语句或源程序结构的例程库及的例程库及Help源程序编辑源程序编辑器和编译器器和编译器可视化开发可视化开发系统集成

2、了一系系统集成了一系列系统可用资源列系统可用资源和开发工具和开发工具一、一、Windows编程基础编程基础4采用交互式方法时,可视化开发平台给出了许多选用的采用交互式方法时,可视化开发平台给出了许多选用的对象对象,程序员,程序员可选择所需可选择所需对象对象并确定其属性,由此搭建起应用程序的并确定其属性,由此搭建起应用程序的“大框架大框架”,并可根据需要进一步编写必要的细节代码段,最后构成完整的并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程应用程序序Windows的的程序设计语言程序设计语言VCVBVJ都是都是“面向面向对象对象”的程序设计语言的程序设计语言对象对象是是Window

3、s的规范部件的规范部件窗口窗口菜单菜单按钮按钮对话框对话框程序模块程序模块编写编写Windows程序相当一部分工程序相当一部分工作是在创建作是在创建对象对象和和为为对象对象属性赋值属性赋值对象对象特征:具有规范形态和操作模式特征:具有规范形态和操作模式编程方法编程方法传统编写法传统编写法-API交互式方法交互式方法-MFC5APIAPI函数函数的功能的功能为应用程序为应用程序提提供供Windows系系统统特殊函数特殊函数及及数据结构数据结构Win应用程序应用程序可以利用标准可以利用标准大量大量API函数函数调用系统功能调用系统功能是是Win系统系统与与Win应用程序应用程序间的间的标准程序标准

4、程序接口接口窗口管理函数窗口管理函数实现窗口的创实现窗口的创建、移动和修建、移动和修改功能改功能系统服务函数系统服务函数:实现与操作:实现与操作系统有关的多系统有关的多种功能种功能图形设备图形设备(GDI)函数函数:实现与:实现与设备无关的图设备无关的图形操作功能形操作功能6 利用利用WindowsWindows APIAPI函数编写函数编写WindowsWindows应用程序应用程序必必须首先了解以下内容:须首先了解以下内容:(1)(1)窗口的概念窗口的概念(2)(2)事件驱动的概念事件驱动的概念(3)(3)消息消息(4)(4)句柄句柄7(1) 窗口窗口一个应用程序的窗口一般包含下列成分:一

5、个应用程序的窗口一般包含下列成分:窗口边界窗口边界工作区工作区控制菜单框控制菜单框下拉菜单下拉菜单水平滚动条水平滚动条垂直滚动条垂直滚动条最大化按钮最大化按钮最小化按钮最小化按钮标题栏标题栏8编写一个编写一个Windows应用程序应用程序首先应创建一个或多个窗口,随后应用首先应创建一个或多个窗口,随后应用程序的运行过程即是程序的运行过程即是窗口内部窗口内部、窗口与窗口窗口与窗口之间之间、窗口与系统窗口与系统之间之间进行进行数据处理与数据交换数据处理与数据交换的过程。的过程。应用程应用程序与用序与用户之间户之间交互的交互的接口环接口环境境系统管理系统管理应用程序应用程序的基本单位的基本单位Win

6、应用程序应用程序基本的操作单元基本的操作单元9Windows程序设计是针对程序设计是针对事件事件或或消息消息的处理进行的处理进行 消息消息是描述事是描述事件发生的信息件发生的信息(如按下鼠标或键盘如按下鼠标或键盘)事件驱动事件驱动编程方法对于编写编程方法对于编写交互式程序交互式程序很有用处,它避免很有用处,它避免了死板的操作模式了死板的操作模式Windows程序程序的执行顺序取决于事件发生的顺序,程序的的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的执行顺序是由顺序产生的消息消息驱动的,但是驱动的,但是消息消息的产生往的产生往往并不要求有次序之分。往并不要求有次序之分。(2)事件驱

7、动事件驱动 事件驱动事件驱动是相对于过程驱动而言的,改变了原来文件的顺是相对于过程驱动而言的,改变了原来文件的顺序执行方式。序执行方式。10Windows是由事件驱动的抢占式多任务操作系统。是由事件驱动的抢占式多任务操作系统。多任务系统多任务系统是能够同时处理多个事件,系统为应用程序生是能够同时处理多个事件,系统为应用程序生成一个消息队列,消息在上面被张贴和发送,应用程序只成一个消息队列,消息在上面被张贴和发送,应用程序只要从其消息队列中取出消息,然后一一执行就可以了。要从其消息队列中取出消息,然后一一执行就可以了。(2)事件驱动事件驱动 11Window程序内部运行的原理程序内部运行的原理

8、应用程序 操作系统 输入输出设备 消息队列 消息和句柄消息和句柄12 Windows应用程序应用程序利用利用Windows消息消息(Message)与应用程序及系统进行信息交换。与应用程序及系统进行信息交换。消息号:由事先定义好的消息名标识消息号:由事先定义好的消息名标识字参数字参数(wParam) :用于提供消息的:用于提供消息的附加附加信息信息长字参数长字参数(lParam) :用于提供消息的:用于提供消息的附附加信息加信息消消息息(3) 消息消息13typedef struct tagMSG typedef struct tagMSG HWND hwnd;HWND hwnd; 窗口句柄,

9、为null,则可检索所有驻留在消息队列中的消息 UINT message;UINT message;消息值,由Windows.h头文件中的宏定义来标识 WPARAM wParam;WPARAM wParam;包含有关消息的附加信息,不同消息其值有所不同 LPARAM lParam;LPARAM lParam; DWORD time; DWORD time; 指定消息送至队列的时间 POINT pt;POINT pt;指定消息发送时屏幕光标的位置, 其数据类型POINT也是一个结构体MSG;MSG;附加信息附加信息与具体消息号的值有关,与具体消息号的值有关,在在Win中消息用结构体中消息用结构体

10、MSG表示表示typedef struct tagPOINT typedef struct tagPOINT LONG xLONG x; LONG y;LONG y; POINTPOINT; ;(3) 消息消息14(3) 消息消息 VC中存在几种系统定义的消息分类,不同的前缀符号经常用于中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,系统定义的消息宏前缀如下:消息宏识别消息附属的分类,系统定义的消息宏前缀如下:BM表示按钮控制消息表示按钮控制消息CB表示组合框控制消息表示组合框控制消息DM表示默认下压式按钮控制消息表示默认下压式按钮控制消息EM表示编辑控制消息表示

11、编辑控制消息LB表示列表框控制消息表示列表框控制消息SBM表示滚动条控制消息表示滚动条控制消息WM表示窗口消息表示窗口消息窗口管理消息窗口管理消息初始化消息初始化消息输入消息输入消息系统消息系统消息剪贴板消息剪贴板消息控制处理消息控制处理消息控制通知消息控制通知消息滚动条通知消息滚动条通知消息非用户区消息非用户区消息MDI消息消息DDE消息消息应用程序自定义的消息应用程序自定义的消息Windows编编程程常用消常用消息息15(3) 消息消息 消息队列消息队列:是一个先进先出的缓冲区。通常是:是一个先进先出的缓冲区。通常是某一类型的一个数组,数组中的元素是一条消某一类型的一个数组,数组中的元素是

12、一条消息。操作系统将消息按产生先后顺序依次放入息。操作系统将消息按产生先后顺序依次放入队列中。队列中。消息响应消息响应:应用程序得到消息之后,就要对消息:应用程序得到消息之后,就要对消息进行处理,这就是消息响应。进行处理,这就是消息响应。16句柄句柄是一个是一个4字节长的数值,用于标识应字节长的数值,用于标识应用程序中不同的用程序中不同的对象对象和和同类对象中不同的同类对象中不同的实例实例。窗口窗口按钮按钮图标图标滚动条滚动条输出设备输出设备控制控制文件文件(4) 句柄句柄应用程序通过应用程序通过句柄句柄访问相应访问相应的对象信息的对象信息WindowsWindows程序程序中产生许多中产生许

13、多资源资源(要占用某一块或大或小的内(要占用某一块或大或小的内存),如图标,光标,窗口等,应用程序的实例(已加载存),如图标,光标,窗口等,应用程序的实例(已加载到内存运行中的程序),操作系统每产生一个这样的资源到内存运行中的程序),操作系统每产生一个这样的资源时,都要将他们放入相应的内存,并为这些内存指定一个时,都要将他们放入相应的内存,并为这些内存指定一个唯一的标志号(句柄),操作系统要管理和操作这些资源唯一的标志号(句柄),操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源的。,都是通过句柄来找到对应的资源的。17常用句柄类型及其说明常用句柄类型及其说明(4) 句柄句柄HWNDH

14、WND窗口句柄窗口句柄HDCHDC设备环境句柄设备环境句柄HBITMAPHBITMAP位图句柄位图句柄HCURSORHCURSOR光标句柄光标句柄HICONHICON图标句柄图标句柄HFONTHFONT字体句柄字体句柄HMENUHMENU菜单句柄菜单句柄HPENHPEN画笔句柄画笔句柄HFILEHFILE文件句柄文件句柄HBRUSHHBRUSH画刷句柄画刷句柄HINSTANCEHINSTANCE 当前实例句柄当前实例句柄18二、二、Windows应用程序常用消息应用程序常用消息1. WM_LBUTTONDOWN:产生单击鼠标左键的消息产生单击鼠标左键的消息此外,相似的消息还有:此外,相似的消息

15、还有:lWM_LBUTTONUP:放开鼠标左键时产生;:放开鼠标左键时产生;lWM_RBUTTONDOWN:单击鼠标右键时产生;:单击鼠标右键时产生;lWM_RBUTTONUP:放开鼠标右键时产生;:放开鼠标右键时产生;lWM_LBUTTONDBLCLK:双击鼠标左键时产生;:双击鼠标左键时产生;lWM_RBUTTONDBLCLK:双击鼠标右键时产生。:双击鼠标右键时产生。1Param高字节高字节包含当前光标的包含当前光标的Y坐标坐标值值低字节低字节包含当前光标的包含当前光标的X坐标坐标值值wParam包含一整包含一整数值以标识鼠标键数值以标识鼠标键的的按下状态按下状态MK_LBUTTON按下

16、鼠标左键按下鼠标左键MK_MBUTTON按下鼠标中键按下鼠标中键MK_RBUTTON按下鼠标右键按下鼠标右键192. WM_KEYDOWN:按下一个按下一个非系统键非系统键时产生的消息时产生的消息 系统键系统键是指实现系统操作的组合键,例如是指实现系统操作的组合键,例如Alt与某个功与某个功能键的组合以实现系统菜单操作等。能键的组合以实现系统菜单操作等。3. WM_ CHAR:按下一个按下一个非系统键非系统键时产生的消息时产生的消息wParam 为按键的为按键的ASCII码码1Param 与与WM_KEYDOWN的相同的相同wParam:按下键的:按下键的虚拟键码虚拟键码,用以标识按下或释放的

17、键,用以标识按下或释放的键1Param:记录了按键的重复次数、扫描码、转移代码、先前键的状态:记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息。等信息。相似的消息还有相似的消息还有WM_KEYUP, 在放开非系统键时产生在放开非系统键时产生如如F1的虚拟键码的虚拟键码在在Windows.hWindows.h文文件中定义为件中定义为VK_F1VK_F1204. WM_CREATE:由由CreateWindow函数发出的消息函数发出的消息wParam:未用:未用1Param:包含一个指向:包含一个指向CREATESTRUCT数据结构数据结构的指针的指针5. WM_CLOSE:关闭窗口时产

18、生的消息关闭窗口时产生的消息wParam和和1Param均未用。均未用。6. WM_DESTROY:由由DestroyWindow函数发出的消息函数发出的消息wParam和和1Param均未用。均未用。217. WM_QUIT:由由PostQuitMessage函数发出的消息函数发出的消息退出应用程序时发出的消息退出应用程序时发出的消息wParam:含退出代码:含退出代码,标识程序退出运行时的有关信息标识程序退出运行时的有关信息1Param:未用:未用8. WM_PAINT用户区移动或显示用户区移动或显示用户窗口改变大小用户窗口改变大小程序通过滚动条滚动窗口程序通过滚动条滚动窗口下拉式菜单关闭

19、并需要恢复被覆盖的部分下拉式菜单关闭并需要恢复被覆盖的部分Windows清除对话框等对象,并需要恢复被覆盖的部分清除对话框等对象,并需要恢复被覆盖的部分均产生均产生WM_PAINTWM_PAINT消息消息22三、三、Windows中的事件驱动程序设计中的事件驱动程序设计启动启动输入姓名输入姓名输入第一次测试成绩输入第一次测试成绩输入第二次测试成绩输入第二次测试成绩输入第三次测试成绩输入第三次测试成绩计算平均成绩计算平均成绩结束结束过程驱动过程驱动方法计算平均成绩方法计算平均成绩启动启动消息处理消息处理结束结束输入姓名输入姓名输入第一次成绩输入第一次成绩输入第二次成绩输入第二次成绩输入第三次成绩

20、输入第三次成绩计算平均成绩计算平均成绩事件驱动事件驱动方法计算平均成绩方法计算平均成绩23四、四、Windows应用程序组成及编程步骤应用程序组成及编程步骤 1. 应用程序的组成应用程序的组成一个完整的一个完整的Windows应用程序应用程序通常由通常由五种五种类型类型的文件组成的文件组成。1.C1.C语言源程序文件语言源程序文件2.2.头文件头文件3.3.模块定义文件模块定义文件4.4.资源描述文件资源描述文件5.5.项目文件项目文件242. 源程序组成结构源程序组成结构入口函数入口函数WinMain窗口函数窗口函数WndProcWndProcWindows应用程序应用程序构成基构成基本框架

21、本框架包含各种包含各种数据类型、数据类型、数据结构数据结构与函数等与函数等1. 所有应用程序的入口,类似所有应用程序的入口,类似Main函数,函数,2. 完成一系列的定义和初始化,并产生消息循环完成一系列的定义和初始化,并产生消息循环WinMain和和WinProc是是Windows应用程序的主体应用程序的主体25(1) WinMain函数函数三个基本的组成部分三个基本的组成部分:函数说明函数说明、初始化初始化和和消息循环消息循环功能功能注册窗口类,建立窗口及执行必要的初始化注册窗口类,建立窗口及执行必要的初始化进入消息循环,据接受的消息调用相应的处理过程进入消息循环,据接受的消息调用相应的处

22、理过程当消息循环检索到当消息循环检索到WM_QUIT时终止程序运行时终止程序运行WinMain函数函数WinMain函数说明函数说明WinMain函数的说明如下:函数的说明如下:int WINAPI WinMain int WINAPI WinMain ( ( HINSTANCE hThisInst,HINSTANCE hThisInst,应用程序当前实例句柄应用程序当前实例句柄 HINSTANCe hPrevInst,HINSTANCe hPrevInst,应用程序其他实例句柄应用程序其他实例句柄 LPSTR lpszCmdLine, LPSTR lpszCmdLine, 指向程序命令行参数

23、的指针指向程序命令行参数的指针 Int nCmdShowInt nCmdShow应用程序开始执行时窗口显示方式的整数值标识应用程序开始执行时窗口显示方式的整数值标识) )注意!注意!Win是多任务管理的,同一应是多任务管理的,同一应用程序的多个窗口可能会同时存用程序的多个窗口可能会同时存,Win系统对每个窗口的执行称为一个实例系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识并用一个实例句柄来唯一标识26(2) 初始化初始化初初始始化化显示窗口显示窗口创建窗口实例创建窗口实例窗口类的注册:窗口类必须先注册后使用窗口类的注册:窗口类必须先注册后使用窗口类的定义:定义窗口的形式与功能窗口

24、类的定义:定义窗口的形式与功能LoadIconLoadIconLoadCursorLoadCursorGetStockObjectGetStockObjectRegisterClassRegisterClassCreateWindow ShowWindow ShowWindow ,UpdateWindowUpdateWindow27typedef struct _WNDCLASS UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; HICON hIcon; HCURSOR hCur

25、sor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; WNDCLASS; (a)窗口类定义窗口类定义28通过给窗口类数据结构通过给窗口类数据结构WNDCLASS赋值完成赋值完成,该数据结构中该数据结构中包含窗口类的各种属性。窗口类定义常用以下函数:包含窗口类的各种属性。窗口类定义常用以下函数:LoadIcon的作用是在应用程序中加载一个窗口图标。其原型的作用是在应用程序中加载一个窗口图标。其原型为:为:HICON LoadIcon(HINSTANCE HICON LoadIcon(HINSTANCE hI

26、nstancehInstance,LPCTSTR ,LPCTSTR lpIconNamelpIconName) )图标资源名或系统预定义图标标识名图标资源名或系统预定义图标标识名图标资源所在的模块句柄,图标资源所在的模块句柄,NULLNULL则使用系统预定义图标则使用系统预定义图标29LoadCursor的作用是在应用程序中加载一个窗口光标的作用是在应用程序中加载一个窗口光标HCURSOR LoadCursor(HINSTANCE HCURSOR LoadCursor(HINSTANCE hInstancehInstance, , LPCTSTR LPCTSTR lpCursorNamelpC

27、ursorName) )光标资源所在的模光标资源所在的模块句柄,块句柄,NULLNULL则使则使用系统预定义光标用系统预定义光标光标资源名或系统光标资源名或系统预定义光标标识名预定义光标标识名应用程序调用函数应用程序调用函数GetStockObject获取系统提供的背景刷获取系统提供的背景刷HBRUSH GetStockObject(int nBrush); HBRUSH GetStockObject(int nBrush); 30(b)注册窗口类注册窗口类Win系统本身提供部分预定义的窗口类,程序员也可以自定系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。窗

28、口类的注册由函数义窗口类,窗口类必须先注册后使用。窗口类的注册由函数RegisterClass()实现。实现。 RegisterClass(&wndclass);RegisterClass(&wndclass); /wndclass /wndclass为窗口类结构为窗口类结构 RegisterClassRegisterClass函数的返回为函数的返回为布尔值布尔值,注册成功则返回,注册成功则返回真真31(c) 创建窗口实例创建窗口实例创建一个窗口类的实例由函数创建一个窗口类的实例由函数CreateWindowCreateWindow()实现()实现函数原型如下:函数原型如下:H

29、WND Create WindowHWND Create Window ( ( LPCTSTR lpszClassName,LPCTSTR lpszClassName,窗口类名窗口类名 LPCTSTR lpszTitle,LPCTSTR lpszTitle, 窗口标题名窗口标题名 DWORD dwStyle,DWORD dwStyle, 创建窗口的样式创建窗口的样式 int x,y,int x,y, 窗口左上角坐标窗口左上角坐标 int nWidth,nHeight,int nWidth,nHeight, 窗口宽度和度高窗口宽度和度高 HWND hwndParent,HWND hwndPare

30、nt, 该窗口的父窗口句柄该窗口的父窗口句柄 HWENU hMenu,HWENU hMenu, 窗口主菜单句柄窗口主菜单句柄 HINSTANCE hInstance, HINSTANCE hInstance, 创建窗口的应用程序当前句柄创建窗口的应用程序当前句柄 LPVOID lpParam LPVOID lpParam 指向一个传递给窗口的参数值的指针指向一个传递给窗口的参数值的指针 ) )32常用窗口样式 标识标识 说明说明 WS_BORDER 创建一带边框的窗口创建一带边框的窗口 WS_CAPTION 创建一带标题栏的窗口创建一带标题栏的窗口 WS_VSCROLL 创建一带垂直滚动条的窗

31、口创建一带垂直滚动条的窗口 WS_MAXIMIZEBOX 创建一带最大化框的窗口创建一带最大化框的窗口 WS_MAXIMIZE 创建一最大尺寸的窗口创建一最大尺寸的窗口 WS_MINIMIZEBOX 创建一带最小化框的窗口创建一带最小化框的窗口 WS_MINIMIZE 创建一最小尺寸的窗口创建一最小尺寸的窗口 WS_OVERLAPPED 创建一带边框和标题的窗口创建一带边框和标题的窗口 WS_OVERLAPPEDWINDOW 创建一带边框、标题栏、系统菜单及最大、创建一带边框、标题栏、系统菜单及最大、最小化最小化框的窗口框的窗口 WS_POPUP 创建一弹出式窗口创建一弹出式窗口 WS_POP

32、UPWINDOW 创建一带边框和系统菜单的弹出式窗口创建一带边框和系统菜单的弹出式窗口 WS_SYSMENU 创建一带系统菜单的窗口创建一带系统菜单的窗口 WS_HSCROLL 创建一带水平滚动条的菜单创建一带水平滚动条的菜单 33(d)显示窗口显示窗口窗口类的显示由窗口类的显示由ShowWindow和和UpdateWindow函数实现。应用程序调函数实现。应用程序调用用ShowWindow函数在屏幕上显示窗口函数在屏幕上显示窗口ShowWindow(hwnd,nCmdshow)ShowWindow(hwnd,nCmdshow);/nCmdshow为窗口显示形式标识为窗口显示形式标识SW_HI

33、DE隐隐藏藏窗窗口口SW_SHOWNORMAL显显示示并并激激活活窗窗口口SW_SHOWMINIMIZE显显示示并并最最小小化化窗窗口口SW_SHOWMAXMIZE显显示示并并最最大大化化窗窗口口SW_SHOWNOACTIVE显显示示但但不不激激活活窗窗口口SW_RESTORE恢恢复复窗窗口口的的原原来来位位置置及及尺尺寸寸显示窗口后,应用程序调用显示窗口后,应用程序调用UpdateWindow更新并绘制用户更新并绘制用户区,并发出区,并发出WM_PAINT消息。消息。 UpdateWindow(hwnd);UpdateWindow(hwnd);34(3) 消息循环消息循环消息循环的常见格式如

34、下:消息循环的常见格式如下:MSG Msg;MSG Msg;while (GetMessage (&Msg,NULL,0,0)while (GetMessage (&Msg,NULL,0,0) TranslateMessage(&Msg);TranslateMessage(&Msg); DispatchMessage(&Msg);DispatchMessage(&Msg); 将消息的虚拟键将消息的虚拟键转换为字符信息转换为字符信息将消息传送到将消息传送到指定窗口函数指定窗口函数从消息队列中读取从消息队列中读取一条消息,并将消一条消息,并将消息放在

35、息放在MSG结构中结构中 其中函数其中函数GetMessage形式为:形式为:GetMessageGetMessage(lpMSG,lpMSG, / /指向指向MSGMSG结构的指针结构的指针 hwnd,hwnd, nMsgFilteMin, /nMsgFilteMin, /用于消息过滤的最小消息号值用于消息过滤的最小消息号值 nMsgFilterMax /nMsgFilterMax /用于消息过滤的最大消息号值用于消息过滤的最大消息号值 )返回零值,即检索返回零值,即检索到到WM_QUITWM_QUIT消息,程消息,程序结束循环并退出序结束循环并退出将消息传递给将消息传递给窗口函数的相窗口函

36、数的相应过程处理应过程处理消消息息队队列列Windows将将产生的消息产生的消息WinMain函数函数352 窗口函数窗口函数WinProc WinProc函数由一个或多个函数由一个或多个switch语句组成。每一条语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应语句对应一种消息,当应用程序接收到一个消息时,相应的的case语句被激活并执行相应的响应程序模块。语句被激活并执行相应的响应程序模块。WinProc包含了对各种可能接收到的消息的处理过程包含了对各种可能接收到的消息的处理过程定义定义了应用程序对接收到的不同消息的响应了应用程序对接收到的不同消息的响应36窗口函

37、数的一般形式如下:窗口函数的一般形式如下:LRESULT CALLBACK WndProc(LRESULT CALLBACK WndProc( HWND hwnd,HWND hwnd,UINT messgae,UINT messgae, WPARAM wParam,LPARAM lParam ) WPARAM wParam,LPARAM lParam ) switch(message)switch(message) message message为标识的消息为标识的消息 case case break; break; case case WM_DESTROYWM_DESTROY: : Post

38、QuitMessage(0);PostQuitMessage(0); default:default: return DefWindowProc(hwnd,message,wParam,lParam); return DefWindowProc(hwnd,message,wParam,lParam); return(0);return(0); 在消息处理程序段中一般都有对在消息处理程序段中一般都有对WM_DESTROYWM_DESTROY的处理的处理,该消息是关闭窗口时发出的。它向应用程该消息是关闭窗口时发出的。它向应用程序发出序发出WM_QUITWM_QUIT消息,请求退出消息,请求退出处理

39、函数处理函数: void PostQuitMessage(int nExitCode)void PostQuitMessage(int nExitCode) /nExitCode /nExitCode为应用程序的退出代码为应用程序的退出代码为未定义处理过程的消息提供缺省处理为未定义处理过程的消息提供缺省处理373数据类型数据类型数数据据类类型型说说 明明WORD16位位无无符符号号整整数数LONG32位位有有符符号号整整数数DWORD32位位无无符符号号整整数数HANDLE句句柄柄UINT32位位无无符符号号整整数数BOOL布布尔尔值值LPTSTR指指向向字字符符串串的的 32位位指指针针LP

40、CTSTR指指向向字字符符串串常常量量的的 32位位指指针针 在在Windows.hWindows.h中中定义了定义了WindowsWindows 应用程序应用程序中包含种类繁中包含种类繁多的数据类型多的数据类型384. 一些重要的数据结构一些重要的数据结构MSG:包含一个消息的全部信息,是消息发送的格式:包含一个消息的全部信息,是消息发送的格式WINDCLASS:包含一个窗口类的全部信息及属性:包含一个窗口类的全部信息及属性POINT:定义了屏幕上或窗口中的一个点的:定义了屏幕上或窗口中的一个点的X和和 Y坐标坐标RECT:定义了一个矩形区域及其左上角和右下角的坐标:定义了一个矩形区域及其左

41、上角和右下角的坐标几几种种重重要要的的结结构构39五、应用程序举例五、应用程序举例【例例2-1】创建应用程序框架。本例的目的在于创建应用程序框架。本例的目的在于说明创建说明创建Windows应用程序的方法及过程应用程序的方法及过程#include#include/包含应用程序中所需的数据类型和数据结构的定义包含应用程序中所需的数据类型和数据结构的定义LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); /LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); /窗口函数说明窗口函数说明/- /- 以下

42、初始化窗口类以下初始化窗口类 -int WINAPI WinMain(int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hInstance, HINSTANCE hPrevInst,HINSTANCE hPrevInst,LPSTR lpszCmdLine,LPSTR lpszCmdLine,int nCmdShowint nCmdShow) ) HWND hwnd ;HWND hwnd ; MSG Msg ;MSG Msg ; WNDCLASS wndclass ;WNDCLASS wndclass ; char lpszClassName

43、= char lpszClassName = 窗口窗口;/窗口类名窗口类名 char lpszTitle= My_Windows;char lpszTitle= My_Windows;/窗口标题名窗口标题名40 /窗口类的定义窗口类的定义wndclass.style=0;wndclass.style=0;/窗口类型为缺省类型窗口类型为缺省类型wndclass.lpfnWndProc=WndProc;wndclass.lpfnWndProc=WndProc; /定义窗口处理函数定义窗口处理函数wndclass.cbClsExtra=0;wndclass.cbClsExtra=0;/窗口类无扩展窗

44、口类无扩展wndclass.cbWndExtra=0;wndclass.cbWndExtra=0;/窗口实例无扩展窗口实例无扩展wndclass.hInstance=hInstance;wndclass.hInstance=hInstance; /当前实例句柄当前实例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);/窗口的最小化图标为缺省图标窗口的最小化图标为缺省图标wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ;

45、wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ;/窗口采用箭头光标窗口采用箭头光标wndclass.hbrBackground=GetStockObject(wndclass.hbrBackground=GetStockObject(WHITE_BRUSHWHITE_BRUSH););/窗口背景为白色窗口背景为白色wndclass.lpszMenuName=NULL;wndclass.lpszMenuName=NULL;/窗口中无菜单窗口中无菜单wndclass.lpszClassName=lpszClassName ;wndclass.lpszClassName=lpszClassName ;/窗口类名为窗口类名为 窗口窗口 41 /- /- 以下进行窗口类的注册以下进行窗口类的注册 -if(!RegisterClass( &

温馨提示

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

评论

0/150

提交评论