《03_Windows应用程序.ppt》由会员分享,可在线阅读,更多相关《03_Windows应用程序.ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、计算机与信息学院 2011年秋季3 Windows 应用程序1计算机与信息学院 2011年秋季程序调试工具程序调试工具包括源程序语包括源程序语法检查、可执法检查、可执行程序修改和行程序修改和运行监视等运行监视等应用程序应用程序HelpHelp和和SetupSetup开发开发工具包工具包系统函数库和系统函数库和系统函数开发系统函数开发工具工具资源管理器资源管理器包括图形化窗包括图形化窗口及组成元素口及组成元素的多种对象的的多种对象的编辑器编辑器可选择并构成具体可选择并构成具体语句或源程序结构语句或源程序结构的例程库及的例程库及Help源程序编辑源程序编辑器和编译器器和编译器可视化开发可视化开发系
2、统集成了一系系统集成了一系列系统可用资源列系统可用资源和开发工具和开发工具一、一、Windows编程基础编程基础2计算机与信息学院 2011年秋季采用交互式方法时,可视化开发平台给出了许多选用的采用交互式方法时,可视化开发平台给出了许多选用的对象对象,程序员,程序员可选择所需可选择所需对象对象并确定其属性,由此搭建起应用程序的并确定其属性,由此搭建起应用程序的“大框架大框架”,并可根据需要进一步编写必要的细节代码段,最后构成完整的并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程应用程序序Windows的的程序设计语言程序设计语言VCVBVJ都是都是“面向面向对象对象”的程序设计语言
3、的程序设计语言对象对象是是Windows的规范部件的规范部件窗口窗口菜单菜单按钮按钮对话框对话框程序模块程序模块编写编写Windows程序相当一部分工程序相当一部分工作是在创建作是在创建对象对象和和为为对象对象属性赋值属性赋值对象对象特征:具有规范形态和操作模式特征:具有规范形态和操作模式编程方法编程方法传统编写法传统编写法-API交互式方法交互式方法-MFC3计算机与信息学院 2011年秋季APIAPI函数函数的功能的功能Win应用程序应用程序可以利用标准可以利用标准大量大量API函数函数调用系统功能调用系统功能是是Win系统系统与与Win应用程序应用程序间的间的标准程序标准程序接口接口为应
4、用程序为应用程序提提供供Windows系系统统特殊函数特殊函数及及数据结构数据结构窗口管理函数窗口管理函数实现窗口的创实现窗口的创建、移动和修建、移动和修改功能改功能系统服务函数系统服务函数:实现与操作系实现与操作系统有关的多种统有关的多种功能功能图形设备图形设备(GDI)函数函数:实现与:实现与设备无关的图设备无关的图形操作功能形操作功能4计算机与信息学院 2011年秋季 利用利用WindowsWindows APIAPI函数和函数和MFCMFC类库类库编写编写WindowsWindows应用应用程序程序必须首先了解以下内容:必须首先了解以下内容:(1)(1)窗口的概念窗口的概念(2)(2)
5、事件驱动的概念事件驱动的概念(3)(3)句柄句柄(4)(4)消息消息5计算机与信息学院 2011年秋季编写一个编写一个Windows应用程序应用程序首先应创建一个或多个窗口,随后应用首先应创建一个或多个窗口,随后应用程序的运行过程即是程序的运行过程即是窗口内部窗口内部、窗口与窗口窗口与窗口之间之间、窗口与系统窗口与系统之间之间进行进行数据处理与数据交换数据处理与数据交换的过程。的过程。应用程应用程序与用序与用户之间户之间交互的交互的接口环接口环境境系统管理系统管理应用程序应用程序的基本单位的基本单位Win应用程序应用程序基本的操作单元基本的操作单元6计算机与信息学院 2011年秋季(1)窗口窗
6、口一个应用程序的窗口一般包含下列成分:一个应用程序的窗口一般包含下列成分:窗口边界窗口边界工作区工作区控制菜单框控制菜单框下拉菜单下拉菜单水平滚动条水平滚动条垂直滚动条垂直滚动条最大化按钮最大化按钮最小化按钮最小化按钮标题栏标题栏7计算机与信息学院 2011年秋季Windows程序设计是针对程序设计是针对事件事件或或消息消息的处理进行的处理进行 消息消息是描述事是描述事件发生的信息件发生的信息(如按下鼠标或键盘如按下鼠标或键盘)事件驱动事件驱动编程方法对于编写编程方法对于编写交互式程序交互式程序很有用处,它避免很有用处,它避免了死板的操作模式了死板的操作模式Windows程序程序的执行顺序取决
7、于事件发生的顺序,程序的的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的执行顺序是由顺序产生的消息消息驱动的,但是驱动的,但是消息消息的产生往的产生往往并不要求有次序之分。往并不要求有次序之分。(2)事件驱动事件驱动 8计算机与信息学院 2011年秋季常用句柄类型及其说明常用句柄类型及其说明句柄句柄是一个是一个4字节长的数值,用于标识应用字节长的数值,用于标识应用程序中不同的程序中不同的对象对象和和同类对象中不同的实同类对象中不同的实例例窗口窗口按钮按钮图标图标滚动条滚动条输出设备输出设备控制控制文件文件(3)句句柄柄应用程序通过应用程序通过句柄句柄访问相应访问相应的对象信息的对象
8、信息HWNDHWND窗口句柄窗口句柄HDCHDC设备环境句柄设备环境句柄HBITMAPHBITMAP位图句柄位图句柄HCURSORHCURSOR光标句柄光标句柄HICONHICON图标句柄图标句柄HFONTHFONT字体句柄字体句柄HMENUHMENU菜单句柄菜单句柄HPENHPEN画笔句柄画笔句柄HFILEHFILE文件句柄文件句柄HBRUSHHBRUSH画刷句柄画刷句柄HINSTANCEHINSTANCE 当前实例句柄当前实例句柄9计算机与信息学院 2011年秋季 Windows应用程序应用程序利用利用Windows消息消息(Message)与应用程序及系统进行信息交换。与应用程序及系统进
9、行信息交换。typedeftypedef structstruct tagMSGtagMSG HWND HWND hwndhwnd;窗口句柄,为窗口句柄,为null,则可检索所有驻留在消息队列中的消息则可检索所有驻留在消息队列中的消息 UINT message;UINT message;消息值,由消息值,由Windows.h头文件中的宏定义来标识头文件中的宏定义来标识 WPARAM WPARAM wParamwParam;包含有关消息的附加信息包含有关消息的附加信息,不同消息其值有所不同不同消息其值有所不同 LPARAM LPARAM lParamlParam;包含有关消息的附加信息包含有关消
10、息的附加信息,不同消息其值有所不同不同消息其值有所不同 DWORD time;DWORD time;指定消息送至队列的时间指定消息送至队列的时间 POINT pt;POINT pt;指定消息发送时屏幕光标的位置,指定消息发送时屏幕光标的位置,其数据类型其数据类型POINT也是一个结构体也是一个结构体MSG;MSG;消息号:由事先定义好的消息名标识消息号:由事先定义好的消息名标识字参数字参数(wParam):用于提供消息的用于提供消息的附加附加信息信息长字参数长字参数(lParam):用于提供消息的用于提供消息的附附加信息加信息消消息息附加信息附加信息与具体与具体消息号的值有关,消息号的值有关,
11、在在Win中消息用中消息用结构体结构体MSG表示表示typedeftypedef structstruct tagPOINTtagPOINT LONG xLONG x;LONG y;LONG y;POINTPOINT;(4)消息消息10计算机与信息学院 2011年秋季(4)消息消息-分类分类 VC中存在几种系统定义的消息分类,不同的前缀符号经常用于消息中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,系统定义的消息宏前缀如下:宏识别消息附属的分类,系统定义的消息宏前缀如下:BM表示按钮控制消息表示按钮控制消息CB表示组合框控制消息表示组合框控制消息DM表示默认下压式
12、按钮控制消息表示默认下压式按钮控制消息EM表示编辑控制消息表示编辑控制消息LB表示列表框控制消息表示列表框控制消息SBM表示滚动条控制消息表示滚动条控制消息WM表示窗口消息表示窗口消息11计算机与信息学院 2011年秋季二、二、Windows应用程序常用消息应用程序常用消息1.WM_LBUTTONDOWN:产生单击鼠标左键的消息产生单击鼠标左键的消息此外,相似的消息还有:此外,相似的消息还有:lWM_LBUTTONUP:放开鼠标左键时产生;放开鼠标左键时产生;lWM_RBUTTONDOWN:单击鼠标右键时产生;单击鼠标右键时产生;lWM_RBUTTONUP:放开鼠标右键时产生;放开鼠标右键时产
13、生;lWM_LBUTTONDBLCLK:双击鼠标左键时产生;双击鼠标左键时产生;lWM_RBUTTONDBLCLK:双击鼠标右键时产生。双击鼠标右键时产生。1Param高字节高字节包含当前光标的包含当前光标的Y坐标坐标值值低字节低字节包含当前光标的包含当前光标的X坐标坐标值值wParam包含一整包含一整数值以标识鼠标键数值以标识鼠标键的的按下状态按下状态MK_LBUTTON按下鼠标左键按下鼠标左键MK_MBUTTON按下鼠标中键按下鼠标中键MK_RBUTTON按下鼠标右键按下鼠标右键12计算机与信息学院 2011年秋季2.WM_KEYDOWN:按下一个按下一个非系统键非系统键时产生的消息时产生
14、的消息 系统键系统键是指实现系统操作的是指实现系统操作的组合键组合键,例如,例如Alt与某个功与某个功能键的组合以实现系统菜单操作等。能键的组合以实现系统菜单操作等。3.WM_ CHAR:按下一个按下一个非系统键非系统键时产生的消息时产生的消息wParam 为为按键的按键的ASCII码码1Param 与与WM_KEYDOWN的相同的相同wParam:按下键的按下键的虚拟键码虚拟键码,用以标识按下或释放的键用以标识按下或释放的键1Param:记录了按键的重复次数、扫描码、转移代码、先前键的状态记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息。等信息。相似的消息还有相似的消息还有WM_K
15、EYUP,在放开非系统键时产生在放开非系统键时产生13计算机与信息学院 2011年秋季4.WM_CREATE:由由CreateWindow函数发出的消息函数发出的消息wParam:未用未用1Param:包含一个指向包含一个指向CREATESTRUCT数据结构的数据结构的指针指针5.WM_CLOSE:关闭窗口时产生的消息关闭窗口时产生的消息wParam和和1Param均未用。均未用。6.WM_DESTROY:由由DestroyWiodow函数发出的消息函数发出的消息wParam和和1Param均未用。均未用。14计算机与信息学院 2011年秋季7.WM_QUIT:由由PostQuitMessag
16、e函数发出的消息函数发出的消息退出应用程序时发出的消息退出应用程序时发出的消息wParam:含退出代码含退出代码,标识程序退出运行时的有关信息标识程序退出运行时的有关信息1Param:未用未用8.WM_PAINT用户区移动或显示用户区移动或显示用户窗口改变大小用户窗口改变大小程序通过滚动条滚动窗口程序通过滚动条滚动窗口下拉式菜单关闭并需要恢复被覆盖的部分下拉式菜单关闭并需要恢复被覆盖的部分Windows清除对话框等对象,并需要恢复被覆盖的部分清除对话框等对象,并需要恢复被覆盖的部分均产生均产生WM_PAINTWM_PAINT消息消息15计算机与信息学院 2011年秋季三、三、Windows中的
17、事件驱动程序设计中的事件驱动程序设计启动启动输入姓名输入姓名输入第一次测试成绩输入第一次测试成绩输入第二次测试成绩输入第二次测试成绩输入第三次测试成绩输入第三次测试成绩计算平均成绩计算平均成绩结束结束过程驱动过程驱动方法计算平均成方法计算平均成绩绩启动启动消息处理消息处理结束结束输入姓名输入姓名输入第一次成绩输入第一次成绩输入第二次成绩输入第二次成绩输入第三次成绩输入第三次成绩计算平均成绩计算平均成绩事件驱动事件驱动方法计算平均成方法计算平均成绩绩16计算机与信息学院 2011年秋季四、四、Windows应用程序组成及编程步骤应用程序组成及编程步骤 1.应用程序的组成应用程序的组成一个完整的一
18、个完整的Windows应用程序应用程序通常由通常由五种五种类型类型的文件组成的文件组成。1.C/C+1.C/C+语言源程序文件语言源程序文件2.2.头文件头文件3.3.模块定义文件模块定义文件4.4.资源描述文件资源描述文件5.5.项目文件项目文件17计算机与信息学院 2011年秋季2.源程序组成结构源程序组成结构入口函数入口函数WinMain窗口函数窗口函数WndProcWndProcWindows应用程序应用程序构成基构成基本框架本框架包含各种包含各种数据类型、数据类型、数据结构数据结构与函数等与函数等WinMain和和WinProc是是Windows应用程序的主体应用程序的主体18计算机
19、与信息学院 2011年秋季(1)WinMain函数函数三个基本的组成部分三个基本的组成部分:函数说明函数说明、初始化初始化和和消息循环消息循环功能功能注册窗口类,建立窗口及执行必要的初始化注册窗口类,建立窗口及执行必要的初始化进入消息循环,据接受的消息调用相应的处理过程进入消息循环,据接受的消息调用相应的处理过程当消息循环检索到当消息循环检索到WM_QUIT时终止程序运行时终止程序运行WinMain函数函数WinMain函数说明函数说明WinMain函数的说明如下:函数的说明如下:intint WINAPI WINAPI WinMainWinMain (HINSTANCE HINSTANCE
20、hThisInsthThisInst,应用程序当前实例句柄应用程序当前实例句柄 HINSTANCeHINSTANCe hPrevInsthPrevInst,应用程序其他实例句柄应用程序其他实例句柄 LPSTR LPSTR lpszCmdLinelpszCmdLine,指向程序命令行参数的指针指向程序命令行参数的指针 IntInt nCmdShownCmdShow应用程序开始执行时窗口显示方式的整数值标识应用程序开始执行时窗口显示方式的整数值标识)注意!注意!Win是多任务管理的,同一应是多任务管理的,同一应用程序的多个窗口可能会同时存用程序的多个窗口可能会同时存,Win系统对每个窗口的执行称为
21、一个实例系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识并用一个实例句柄来唯一标识19计算机与信息学院 2011年秋季(2)初始化初始化(a)窗口类定义窗口类定义 通过给窗口类数据结构通过给窗口类数据结构WNDCLASS赋值完成赋值完成,该数据结构中该数据结构中包含窗口类的各种属性。窗口类定义常用以下函数:包含窗口类的各种属性。窗口类定义常用以下函数:LoadIcon的作用是在应用程序中加载一个窗口图标。其原型为:的作用是在应用程序中加载一个窗口图标。其原型为:HICON HICON LoadIcon(HINSTANCELoadIcon(HINSTANCE hInstancehIn
22、stance,LPCTSTR,LPCTSTR lpIconNamelpIconName)图标资源名或系统预定义图标标识名图标资源名或系统预定义图标标识名图标资源所在的模块句柄,图标资源所在的模块句柄,NULLNULL则使用系统预定义图标则使用系统预定义图标初初始始化化显示窗口显示窗口创建窗口实例创建窗口实例窗口类的注册:窗口类必须先注册后使用窗口类的注册:窗口类必须先注册后使用窗口类的定义:定义窗口的形式与功能窗口类的定义:定义窗口的形式与功能LoadIconLoadIconLoadCursorLoadCursorGetStockObjectGetStockObjectCreateWindow
23、 ShowWindowShowWindow ,UpdateWindowUpdateWindowRegisterClassRegisterClass20计算机与信息学院 2011年秋季LoadCursor的作用是在应用程序中加载一个窗口光标的作用是在应用程序中加载一个窗口光标HCURSOR HCURSOR LoadCursor(HINSTANCELoadCursor(HINSTANCE hInstancehInstance,LPCTSTR LPCTSTR lpCursorNamelpCursorName)光标资源所在的模光标资源所在的模块句柄,块句柄,NULLNULL则使则使用系统预定义光标用系
24、统预定义光标光标资源名或系统光标资源名或系统预定义光标标识名预定义光标标识名应用程序调用函数应用程序调用函数GetStockObject获取系统提供的背景刷获取系统提供的背景刷HBRUSH HBRUSH GetStockObject(intGetStockObject(int nBrushnBrush););21计算机与信息学院 2011年秋季(b)注册窗口类注册窗口类Win系统本身提供部分预定义的窗口类,程序员也可以自定义系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。窗口类的注册由函数窗口类,窗口类必须先注册后使用。窗口类的注册由函数RegisterCla
25、ss()实现。实现。RegisterClass(&wndclassRegisterClass(&wndclass););/wndclasswndclass为窗口类结构为窗口类结构 RegisterClassRegisterClass函数的返回为函数的返回为布尔值布尔值,注册成功则返回,注册成功则返回真真22计算机与信息学院 2011年秋季(c)创建窗口实例创建窗口实例创建一个窗口类的实例由函数创建一个窗口类的实例由函数CreateWindowCreateWindow()()实现实现函数原型如下:函数原型如下:HWND HWND CreateWindowCreateWindow (LPCTSTR
26、 LPCTSTR lpszClassNamelpszClassName,窗口类名窗口类名 LPCTSTR LPCTSTR lpszTitlelpszTitle,窗口标题名窗口标题名 DWORD DWORD dwStyledwStyle,创建窗口的样式创建窗口的样式 intint x,y,x,y,窗口左上角坐标窗口左上角坐标 intint nWidth,nHeightnWidth,nHeight,窗口宽度和度高窗口宽度和度高 HWND HWND hwndParenthwndParent,该窗口的父窗口句柄该窗口的父窗口句柄 HWENU HWENU hMenuhMenu,窗口主菜单句柄窗口主菜单句
27、柄 HINSTANCE HINSTANCE hInstancehInstance,创建窗口的应用程序当前句柄创建窗口的应用程序当前句柄 LPVOID LPVOID lpParamlpParam 指向一个传递给窗口的参数值的指针指向一个传递给窗口的参数值的指针 )23计算机与信息学院 2011年秋季24计算机与信息学院 2011年秋季窗口类的显示由窗口类的显示由ShowWindow和和UpdateWindow函数实现。应用程序调函数实现。应用程序调用用ShowWindow函数在屏幕上显示窗口函数在屏幕上显示窗口ShowWindow(hwnd,nCmdshowShowWindow(hwnd,nCm
28、dshow);/nCmdshow为窗口显示形式标识为窗口显示形式标识显示窗口后,应用程序调用显示窗口后,应用程序调用UpdateWindow更新并绘制用户更新并绘制用户区,并发出区,并发出WM_PAINT消息。消息。UpdateWindow(hwndUpdateWindow(hwnd););(d)显示窗口显示窗口25计算机与信息学院 2011年秋季(3)消息循环消息循环消息循环的常见格式如下:消息循环的常见格式如下:MSG MSG MsgMsg;while(while(GetMessageGetMessage(&Msg,NULL,0,0)(&Msg,NULL,0,0)TranslateMess
29、age(&MsgTranslateMessage(&Msg););DispatchMessage(&MsgDispatchMessage(&Msg););将消息的虚拟键将消息的虚拟键转换为字符信息转换为字符信息将消息传送到将消息传送到指定窗口函数指定窗口函数从消息队列中读取从消息队列中读取一条消息,并将消一条消息,并将消息放在息放在MSG结构中结构中 其中函数其中函数GetMessage形式为:形式为:GetMessageGetMessage(lpMSGlpMSG,/指向指向MSGMSG结构的指针结构的指针 hwndhwnd,nMsgFilteMinnMsgFilteMin,/,/用于消息过滤
30、的最小消息号值用于消息过滤的最小消息号值 nMsgFilterMaxnMsgFilterMax/用于消息过滤的最大消息号值用于消息过滤的最大消息号值 )返回零值,即检索返回零值,即检索到到WM_QUITWM_QUIT消息,程消息,程序结束循环并退出序结束循环并退出将消息传递给将消息传递给窗口函数的相窗口函数的相应过程处理应过程处理消消息息队队列列Windows将将产生的消息产生的消息WinMain函数函数26计算机与信息学院 2011年秋季2 窗口函数窗口函数WinProc WinProc函数由一个或多个函数由一个或多个switch语句组成。每一条语句组成。每一条case语句对应一种消息,当应
31、用程序接收到一个消息时,相应语句对应一种消息,当应用程序接收到一个消息时,相应的的case语句被激活并执行相应的响应程序模块。语句被激活并执行相应的响应程序模块。WinProc包含了对各种可能接收到的消息的处理过程包含了对各种可能接收到的消息的处理过程定义定义了应用程序对接收到的不同消息的响应了应用程序对接收到的不同消息的响应27计算机与信息学院 2011年秋季窗口函数的一般形式如下:窗口函数的一般形式如下:LRESULT CALLBACK LRESULT CALLBACK WndProcWndProc(HWND HWND hwndhwnd,UINT UINT messgaemessgae,W
32、PARAM WPARAM wParam,LPARAMwParam,LPARAM lParamlParam)switch(message)switch(message)message message为标识的消息为标识的消息 case case break;break;case case WM_DESTROYWM_DESTROY:PostQuitMessage(0);PostQuitMessage(0);default:default:return return DefWindowProc(hwnd,message,wParam,lParamDefWindowProc(hwnd,message,w
33、Param,lParam););return(0);return(0);在消息处理程序段中一般都有对在消息处理程序段中一般都有对WM_DESTROYWM_DESTROY的处理的处理,该消息是关闭窗口时发出的。它向应用该消息是关闭窗口时发出的。它向应用程序发出程序发出WM_QUITWM_QUIT消息,请求退出消息,请求退出处理函数处理函数:void void PostQuitMessage(intPostQuitMessage(int nExitCodenExitCode)/nExitCodenExitCode为应用程序的退出代码为应用程序的退出代码为未定义处理过程的消息提供缺省处理为未定义处理
34、过程的消息提供缺省处理28计算机与信息学院 2011年秋季3数据类型数据类型 在在Windows.hWindows.h中中定义了定义了WindowsWindows 应用程序应用程序中包含种类繁中包含种类繁多的数据类型多的数据类型29计算机与信息学院 2011年秋季4.一些重要的数据结构一些重要的数据结构MSG:包含一个消息的全部信息,是消息发送的格式包含一个消息的全部信息,是消息发送的格式WINDCLASS:包含一个窗口类的全部信息及属性包含一个窗口类的全部信息及属性POINT:定义了屏幕上或窗口中的一个点的定义了屏幕上或窗口中的一个点的X和和 Y坐标坐标RECT:定义了一个矩形区域及其左上角
35、和右下角的坐标定义了一个矩形区域及其左上角和右下角的坐标几几种种重重要要的的结结构构30计算机与信息学院 2011年秋季五、应用程序举例五、应用程序举例【例例2-1】创建应用程序框架。本例的目的在于创建应用程序框架。本例的目的在于说明创建说明创建Windows应用程序的方法及过程应用程序的方法及过程#include#include/包含应用程序中所需的数据类型和数据结构的定义包含应用程序中所需的数据类型和数据结构的定义LRESULT CALLBACK LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAMWndProc(HWND,UINT,WPARAM
36、,LPARAM);/);/窗口函数说明窗口函数说明/-/-以下初始化窗口类以下初始化窗口类 -intint WINAPI WINAPI WinMain(WinMain(HINSTANCEHINSTANCE hInstancehInstance,HINSTANCE HINSTANCE hPrevInst,hPrevInst,LPSTRLPSTR lpszCmdLine,lpszCmdLine,intint nCmdShownCmdShow)HWND HWND hwndhwnd;MSG MSG MsgMsg;WNDCLASS WNDCLASS wndclasswndclass;char char
37、lpszClassNamelpszClassName=窗口窗口;/窗口类名窗口类名 char char lpszTitlelpszTitle=My_Windows;=My_Windows;/窗口标题名窗口标题名31计算机与信息学院 2011年秋季/窗口类的定义窗口类的定义wndclass.stylewndclass.style=0;=0;/窗口类型为缺省类型窗口类型为缺省类型wndclass.lpfnWndProcwndclass.lpfnWndProc=WndProcWndProc;/定义窗口处理函数定义窗口处理函数wndclass.cbClsExtrawndclass.cbClsExtra
38、=0;=0;/窗口类无扩展窗口类无扩展wndclass.cbWndExtrawndclass.cbWndExtra=0;=0;/窗口实例无扩展窗口实例无扩展wndclass.hInstancewndclass.hInstance=hInstancehInstance;/当前实例句柄当前实例句柄wndclass.hIconwndclass.hIcon=LoadIcon(NULL,IDI_APPLICATIONLoadIcon(NULL,IDI_APPLICATION););/窗口的最小化图标为缺省图标窗口的最小化图标为缺省图标wndclass.hCursorwndclass.hCursor=Lo
39、adCursor(NULL,IDC_ARROWLoadCursor(NULL,IDC_ARROW););/窗口采用箭头光标窗口采用箭头光标wndclass.hbrBackgroundwndclass.hbrBackground=GetStockObject(GetStockObject(WHITE_BRUSHWHITE_BRUSH););/窗口背景为白色窗口背景为白色wndclass.lpszMenuNamewndclass.lpszMenuName=NULL;=NULL;/窗口中无菜单窗口中无菜单wndclass.lpszClassNamewndclass.lpszClassName=lps
40、zClassNamelpszClassName;/窗口类名为窗口类名为 窗口窗口 32计算机与信息学院 2011年秋季/-/-以下进行窗口类的注册以下进行窗口类的注册 -if(!RegisterClassif(!RegisterClass(&(&wndclasswndclass)/如果注册失败则发出警告如果注册失败则发出警告 MessageBeep(0)MessageBeep(0);return FALSE;return FALSE;/-/-创建窗口创建窗口 -hwndhwnd=CreateWindowCreateWindow(lpszClassNamelpszClassName,/窗口类名窗
41、口类名lpszTitlelpszTitle,/窗口实例的标题名窗口实例的标题名WS_OVERLAPPEDWINDOW,WS_OVERLAPPEDWINDOW,/窗口的风格窗口的风格CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,/窗口左上角坐标为缺省值窗口左上角坐标为缺省值CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,/窗口的高和宽为缺省值窗口的高和宽为缺省值NULL,NULL,/此窗口无父窗口此窗口无父窗口NULL,NULL,/此窗口无主菜单此窗口无主菜单hIns
42、tancehInstance,/创建此窗口的应用程序的当前句柄创建此窗口的应用程序的当前句柄NULL NULL/不使用该值不使用该值););33计算机与信息学院 2011年秋季/-/-显示窗口显示窗口 -ShowWindowShowWindow(hwndhwnd,nCmdShownCmdShow););/-/-绘制用户区绘制用户区 -UpdateWindow(hwndUpdateWindow(hwnd););/-/-消消 息息 循循 环环 -while(while(GetMessage(&MsgGetMessage(&Msg,NULL,0,0),NULL,0,0)TranslateMessag
43、eTranslateMessage(&(&MsgMsg););DispatchMessageDispatchMessage(&(&MsgMsg););return return Msg.wParamMsg.wParam;/消息循环结束即程序终止时将信息返回系消息循环结束即程序终止时将信息返回系统统 34计算机与信息学院 2011年秋季/窗口函数窗口函数LRESULT CALLBACK LRESULT CALLBACK WndProcWndProc(HWND HWND hwndhwnd,UINT message,UINT message,WPARAM WPARAM wParamwParam,LP
44、ARAM LPARAM lParamlParam)switch(message)switch(message)case WM_DESTROY:case WM_DESTROY:PostQuitMessage(0);PostQuitMessage(0);default:default:/缺省时采用系统消息缺省处理函数缺省时采用系统消息缺省处理函数return return DefWindowProc(hwnd,message,wParam,lParamDefWindowProc(hwnd,message,wParam,lParam););return(0);return(0);调用调用PostQuitMessagePostQuitMessage发出发出WM_QUITWM_QUIT消息消息35