《面向对象与可视化程序设计第3章.ppt》由会员分享,可在线阅读,更多相关《面向对象与可视化程序设计第3章.ppt(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象与可视化面向对象与可视化程序设计程序设计 -Visual C+-Visual C+编程编程主讲教师主讲教师主讲教师主讲教师:唐唐唐唐 龙龙龙龙教授教授教授教授 (计算机科学与技术系计算机科学与技术系计算机科学与技术系计算机科学与技术系)黄维通黄维通黄维通黄维通博士博士博士博士 (计算机与信息管理中心)计算机与信息管理中心)计算机与信息管理中心)计算机与信息管理中心)清清清清 华华华华 大大大大 学学学学2001200120012001年年年年2 2 2 2月月月月5/30/20231第三章第三章 Windows Windows 编程基础编程基础5/30/20232内容提要内容提要wWi
2、ndowsWindows编程基础知识编程基础知识wWindowsWindows应用程序常用消息应用程序常用消息wWindowsWindows中的事件驱动程序设计中的事件驱动程序设计wWindowsWindows应用程序组成及编程步骤应用程序组成及编程步骤5/30/202333.1.3.1.Windows Windows编程编程基础知识基础知识5/30/20234可视化开发系统可视化开发系统(资源和工具的集成资源和工具的集成)源程序源程序编辑器编辑器编译器编译器调试工具调试工具语法检查语法检查程序修改程序修改运行监视运行监视应用程序应用程序Help和和Setup开发工具开发工具函数库和函数库和系
3、统函数系统函数开发工具开发工具资源管理器资源管理器各种窗口和各种窗口和控件的编辑器控件的编辑器例程库例程库及及Help其他其他功能功能集资源和工具于一体的开发系统集资源和工具于一体的开发系统5/30/20235Windows的程序设计语言的程序设计语言w“面向对象面向对象(Object-Oriented)”(Object-Oriented)”的语的语言言VC+,VBVC+,VB和和VJVJ适合于适合于WindowsWindows的程序开的程序开发。发。wWindowsWindows的程序中的程序中,对象对象是具有规范形态是具有规范形态和操作模式的部件和操作模式的部件:窗口窗口菜单菜单按钮按钮对
4、话框对话框程序模块程序模块5/30/20236编写编写Windows程序主要工作:程序主要工作:*在创建在创建对象对象*为为对象对象属性赋值属性赋值Windows的程序设计方法的程序设计方法w传统编写法传统编写法-使用使用API(Application Programming Interface)w交互式方法交互式方法-使用使用MFC MFC(Microsoft Foundation Class)5/30/20237应用程序接口应用程序接口APIw定义定义Win系统各种特殊函数及数据结构;系统各种特殊函数及数据结构;w包含上千个可调用系统功能的标准包含上千个可调用系统功能的标准API函数;函数
5、;w实现应用程序与实现应用程序与Win系统间的标准程序系统间的标准程序接口。接口。5/30/20238API函数实现三种功能函数实现三种功能w窗口管理函数窗口管理函数窗口的创建、移动和窗口的创建、移动和修改:修改:w图形设备图形设备(GDI)函数函数与设备无关的与设备无关的图形操作图形操作w系统服务函数系统服务函数与操作系统有关的多与操作系统有关的多种服务。种服务。5/30/20239用用MFCMFC库交互式可视化编程库交互式可视化编程wMFC类库含有大量已定义好的类库含有大量已定义好的类类(class),可根据编程的需要,调用相,可根据编程的需要,调用相应的类,或自定义有关的类应的类,或自定
6、义有关的类w实现可视化交互开发方式实现可视化交互开发方式w选择所需对象并确定其属性,搭建起应用选择所需对象并确定其属性,搭建起应用程序的程序的“大框架大框架”,w编写必要的细节代码段,构成完整的应用编写必要的细节代码段,构成完整的应用程序。程序。5/30/202310窗口窗口(Window(Window)事件驱动事件驱动(Event-driven)句柄句柄(Handl)(Handl)消息消息(Message)(Message)相关的重要概念相关的重要概念利用利用APIAPI函数和函数和MFCMFC类库编写类库编写WindowsWindows应用应用程序,都必须了解下列有关概念:程序,都必须了解
7、下列有关概念:5/30/202311控制菜单框控制菜单框构成一个应用程序构成一个应用程序窗口窗口的成分的成分窗口边界窗口边界工作区工作区下拉菜单下拉菜单水平滚动条水平滚动条垂直滚动条垂直滚动条最大化按钮最大化按钮最小化按钮最小化按钮标题栏标题栏5/30/202312wWin应用程序应用程序编程编程创建一个或多个窗口,创建一个或多个窗口,wWin应用程序应用程序运行运行窗口内部窗口内部、窗口与窗口窗口与窗口之间之间、窗口窗口与系统与系统之间进行之间进行数据处理与交换数据处理与交换的过程。的过程。应用程序与用户之间应用程序与用户之间交互的接口环境交互的接口环境系统对应用程序系统对应用程序管理的基本
8、单位管理的基本单位Window应用程序应用程序基本的操作单元基本的操作单元窗口窗口及其功能及其功能5/30/202313事件事件一种情况或一种活动的一种情况或一种活动的发生、发生、或一种指定状态的变化,例如,按下鼠或一种指定状态的变化,例如,按下鼠标或键盘的键。标或键盘的键。有关有关事件驱动事件驱动的概念的概念 事件驱动事件驱动编程方法编程方法针对针对事件事件或或消息消息的处理进行;的处理进行;适于编写适于编写交互式程序交互式程序。事件驱动事件驱动是由描述是由描述事件事件发生的信息,发生的信息,即即消息消息驱动驱动Win程序程序的执行。的执行。程序的执取决于事件发生的顺序;程序的执取决于事件发
9、生的顺序;消息消息的产生并不要求有次序之分。的产生并不要求有次序之分。5/30/202314有关有关句柄句柄的概念的概念句柄句柄用于标识用于标识不同的不同的对象对象和同类对象和同类对象中不同的中不同的实例实例的标识符,一个其长度为的标识符,一个其长度为4字节长字节长整数值整数值。句柄句柄是是Win应用程序编程的基础。应用程应用程序编程的基础。应用程序过序过句柄句柄访问相应的对象信息。访问相应的对象信息。5/30/202315常用常用句柄句柄类型类型HWNDHWND窗口句柄窗口句柄HINSTANCEHINSTANCE 当前实例句柄当前实例句柄HCURSORHCURSOR光标句柄光标句柄HFONT
10、HFONT字体句柄字体句柄HPENHPEN画笔句柄画笔句柄HBRUSHHBRUSH画刷句柄画刷句柄HDCHDC设备环境句柄设备环境句柄HBITMAPHBITMAP位图句柄位图句柄HICONHICON图标句柄图标句柄HMENUHMENU菜单句柄菜单句柄HFILEHFILE文件句柄文件句柄 句柄句柄所标识所标识对象实例对象实例w窗口窗口w按钮按钮w图标图标w滚动条滚动条w输出设备输出设备w控件控件w文件文件w.。句柄句柄的类型的类型5/30/202316附加信息附加信息与具体消息号的值有关与具体消息号的值有关有关有关消息消息的概念的概念应用程序利用应用程序利用消息消息与系统及其它应用程与系统及其它
11、应用程序进行信息交换。序进行信息交换。消息消息的三个组成部分:的三个组成部分:消息号:由事先定义好的消息名标识消息号:由事先定义好的消息名标识字参数字参数(wParam):用于提供消息的:用于提供消息的附加信息附加信息长字参数长字参数(lParam):用于提供消息的:用于提供消息的附加信息附加信息5/30/202317消息消息用结构用结构MSG表示表示typedef struct tagMSG typedef struct tagMSG HWND hwnd;/HWND hwnd;/窗口句柄,为窗口句柄,为nullnull,则检索队的所有消息,则检索队的所有消息 UINT message;/UI
12、NT message;/消息号,由消息号,由Windows.hWindows.h中的宏定义来标识中的宏定义来标识 WPARAM wParam;/WPARAM wParam;/消息的附加信息消息的附加信息 LPARAM lParam;/LPARAM lParam;/消息的附加信息消息的附加信息 DWORD time;/DWORD time;/指定消息送至队列的时间指定消息送至队列的时间 POINT pt;/POINT pt;/指定消息发送时屏幕光标的位置,指定消息发送时屏幕光标的位置,MSG;MSG;typedef struct tagPOINT typedef struct tagPOINT
13、LONG x LONG x,y;/xy;/x和和y y分别表示屏幕的横坐标和纵坐标分别表示屏幕的横坐标和纵坐标POINT;POINT;5/30/202318消息消息的分类的分类 各种消息分类,分别以不同的前缀表示各种消息分类,分别以不同的前缀表示:wBM 按钮控制消息。按钮控制消息。wCB 组合框控制消息。组合框控制消息。wDM 默认下压式按钮控制消息。默认下压式按钮控制消息。wEM 编辑控制消息。编辑控制消息。wLB 列表框控制消息。列表框控制消息。wSBM 滚动条控制消息。滚动条控制消息。wWM 窗口消息。窗口消息。5/30/2023193.2.3.2.Windows Windows应用程
14、序应用程序常用消息常用消息5/30/202320Windows编程编程常用消息常用消息窗口管理消息窗口管理消息初始化消息初始化消息输入消息输入消息系统消息系统消息剪贴板消息剪贴板消息控制处理消息控制处理消息控制通知消息控制通知消息滚动条通知消息滚动条通知消息非用户区消息非用户区消息MDI消息消息DDE消息消息应用程序自定义应用程序自定义的消息的消息5/30/202321此外,类似的此外,类似的鼠标左右键鼠标左右键消息还有:消息还有:wWM_LBUTTONUP:放开左放开左键时产生的键时产生的消息消息;wWM_RBUTTONDOWN:单击右单击右键时产生的键时产生的消息消息;wWM_RBUTTO
15、NUP:放开右放开右键时产生的键时产生的消息消息;wWM_LBUTTONDBLCLK:双击左双击左键时产生的键时产生的消息消息;wWM_RBUTTONDBLCLK:双击右双击右键时产生的键时产生的消息消息。1.WM_LBUTTONDOWN:产生单击鼠标左键的消息,附加信息:产生单击鼠标左键的消息,附加信息:wlParam当前光标位置当前光标位置低字节低字节为为X坐标值坐标值高字节为高字节为Y坐标值坐标值wwParam一整数值以标识鼠标键的一整数值以标识鼠标键的按下状态按下状态MK_LBUTTON按下鼠标按下鼠标左左键键MK_MBUTTON按下鼠标按下鼠标中中键键MK_RBUTTON按下鼠标按下
16、鼠标右右键键5/30/2023222.WM_KEYDOWN:按下一个按下一个非系统键非系统键时产生的消息时产生的消息wwParam按下键的按下键的虚拟键码虚拟键码,标识按或放,标识按或放。wlParam记录按键的重复次数、扫描码、转移代记录按键的重复次数、扫描码、转移代码及先前键的状态等信息码及先前键的状态等信息。相似的消息还有相似的消息还有WM_KEYUP,在放开非系统键时产生在放开非系统键时产生3.WM_ CHAR:按下一个按下一个非系统键非系统键时产生的消息时产生的消息w wParam按下键的按下键的ASCII码。码。w1Param与与WM_KEYDOWN的相同。的相同。5/30/202
17、3234.WM_CREATE:由由CreateWindow函数发出的消息。函数发出的消息。wwParam未用。未用。wlParam个指向个指向CREATESTRUCT数据数据结构的指针。结构的指针。6.WM_DESTROY:由由DestroyWiodow函数发出的消息。函数发出的消息。wwParam和和1Param均未用。均未用。5.WM_CLOSE:关闭窗口时产生的消息关闭窗口时产生的消息。wwParam和和1Param均未用。均未用。5/30/2023247.WM_QUIT退出应用程序时由退出应用程序时由PostQuitMessage函数发出的消息。函数发出的消息。wwParam退出代码退
18、出代码,标识退出时的有关信息。标识退出时的有关信息。wlParam未用。未用。8.WM_PAINT用户区移动或显示用户区移动或显示用户窗口改变大小用户窗口改变大小程序通过滚动条滚动窗口程序通过滚动条滚动窗口下拉式菜单关闭并需要恢复被覆盖的部分下拉式菜单关闭并需要恢复被覆盖的部分Windows清除对话框等对象,并需要恢复被覆盖的部分清除对话框等对象,并需要恢复被覆盖的部分均产生均产生WM_PAINTWM_PAINT消息消息5/30/2023253.3.3.3.Windows Windows中的中的事件驱动程序设计事件驱动程序设计5/30/202326 Windows中的事件驱动程序设计中的事件驱
19、动程序设计启动启动输入姓名输入姓名输入第一次测试成绩输入第一次测试成绩输入第二次测试成绩输入第二次测试成绩输入第三次测试成绩输入第三次测试成绩计算平均成绩计算平均成绩结束结束过程驱动过程驱动方法计算平均成绩方法计算平均成绩启动启动消息处理消息处理结束结束输入姓名输入姓名输入第一次成绩输入第一次成绩输入第二次成绩输入第二次成绩输入第三次成绩输入第三次成绩计算平均成绩计算平均成绩事件驱动事件驱动方法计算平均成绩方法计算平均成绩5/30/2023273.4.3.4.Windows Windows应用程序组成应用程序组成及编程步骤及编程步骤5/30/2023283.4.1 应用程序的组成应用程序的组成
20、一个完整的一个完整的Windows应用程序应用程序通常包含通常包含如下如下几种类型几种类型的文件:的文件:C/C+C/C+语言源程序文件语言源程序文件(.c.c或或.cpp.cpp)头文件头文件(.h.h)模块定义文件模块定义文件(.def.def)资源描述文件资源描述文件(.rc.rc)项目文件项目文件(.mak.mak).5/30/202329源程序组成结构源程序组成结构入口函数入口函数WinMain窗口函数窗口函数WndProcWndProcWindows应用程序应用程序构成基构成基本框架本框架包含各种包含各种数据类型、数据类型、数据结构数据结构与函数等与函数等1.所有应用程序的入口,所
21、有应用程序的入口,类似类似Main函数,函数,2.完成一系列的定义和初始化,完成一系列的定义和初始化,并产生消息循环并产生消息循环WinMain和和WinProc是是Windows应用程序的主体应用程序的主体5/30/2023301.WinMain函数函数三个基本的组成部分:三个基本的组成部分:函数说明函数说明初始化初始化消息循环消息循环功能功能注册窗口类,建立窗口及初始化注册窗口类,建立窗口及初始化进入消息循环,据接受的消息调用相应的处理过程进入消息循环,据接受的消息调用相应的处理过程当消息循环检索到当消息循环检索到WM_QUIT时终止程序运行时终止程序运行5/30/202331注意!注意!
22、Win是多任务管理的,同一应用程序可能同时存在多是多任务管理的,同一应用程序可能同时存在多个窗口,个窗口,Win系统对每个窗口的执行称为一个实例,并用一系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识个实例句柄来唯一标识(1)函数说明函数说明int WINAPI WinMain int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hThisInst,应用当前实例句柄应用当前实例句柄 HINSTANCe hPrevInst,HINSTANCe hPrevInst,应用其他实例句柄应用其他实例句柄 LPSTR lpszCmdLine,LPS
23、TR lpszCmdLine,指向命令行参数的指针指向命令行参数的指针 Int nCmdShowInt nCmdShow 初始窗口显示方式的整数值标识初始窗口显示方式的整数值标识)5/30/202332(2)初始化初始化窗口类的定义:定义窗口的形式与功能窗口类的定义:定义窗口的形式与功能LoadIcon()LoadIcon()LoadCursor()LoadCursor()GetStockObject()GetStockObject()窗口类的注册:窗口类必须先注册后使用窗口类的注册:窗口类必须先注册后使用RegisterClass()RegisterClass()创建窗口实例创建窗口实例Cr
24、eateWindow()显示窗口显示窗口ShowWindow()ShowWindow()UpdateWindow()UpdateWindow()5/30/202333(a)窗口类定义窗口类定义w通过给窗口类通过给窗口类WNDCLASS赋值完成赋值完成,该数据该数据结构中包含窗口类的各种属性。窗口类定义结构中包含窗口类的各种属性。窗口类定义常用以下函数:常用以下函数:LoadIcon加载一个窗口图标。其原型为:加载一个窗口图标。其原型为:HICON LoadIconHICON LoadIcon(HINSTANCE hInstance,HINSTANCE hInstance,LPCTSTR lpI
25、conName LPCTSTR lpIconName)图标资源名或系统图标资源名或系统预定义图标标识名预定义图标标识名图标资源模块句柄图标资源模块句柄5/30/202334(a)窗口类定义(续)窗口类定义(续)LoadCursor加载一个窗口光标加载一个窗口光标HCURSOR LoadCursorHCURSOR LoadCursor(HINSTANCE hInstance,(HINSTANCE hInstance,LPCTSTR lpCursorName)LPCTSTR lpCursorName)GetStockObject获取系统提供的背景刷获取系统提供的背景刷HBRUSH GetStock
26、Object(int nBrush);HBRUSH GetStockObject(int nBrush);光标资源名或系统光标资源名或系统预定义图标标识名预定义图标标识名光标资源模块句柄光标资源模块句柄5/30/202335(b)注册窗口类注册窗口类Win系统提供部分预定义的窗口类,程序员系统提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后也可以自定义窗口类,窗口类必须先注册后使用。由函数使用。由函数RegisterClass()实现注册。实现注册。RegisterClass(&wndclass);RegisterClass(&wndclass);/wndclass/wnd
27、class为窗口类结构为窗口类结构 RegisterClass RegisterClass函数的返回为布尔值,注册成功函数的返回为布尔值,注册成功则返回真则返回真5/30/202336(c)创建窗口示例创建窗口示例w由函数由函数CreateWindowCreateWindow()创建窗口类的实例。()创建窗口类的实例。HWND Create WindowHWND Create Window (LPCTSTR lpszClassName,LPCTSTR lpszClassName,窗口类名窗口类名 LPCTSTR lpszTitle,LPCTSTR lpszTitle,窗口标题名窗口标题名 DW
28、ORD dwStyle,DWORD dwStyle,创建窗口的样式创建窗口的样式 int x,y,int x,y,窗口左上角坐标窗口左上角坐标 int nWidth,nHeight,int nWidth,nHeight,窗口宽度和度高窗口宽度和度高 HWND hwndParent,HWND hwndParent,该窗口的父窗口句柄该窗口的父窗口句柄 HWENU hMenu,HWENU hMenu,窗口主菜单句柄窗口主菜单句柄 HINSTANCE hInstance,HINSTANCE hInstance,应用程序当前句柄应用程序当前句柄 LPVOID lpParam LPVOID lpPara
29、m 指向传递给窗口的参数值的指针指向传递给窗口的参数值的指针 )5/30/2023375/30/202338(d)显示窗口显示窗口w由由ShowWindow和和UpdateWindow显示显示w调用调用ShowWindow函数在屏幕上显示窗口函数在屏幕上显示窗口ShowWindow(hwnd,nCmdshow)ShowWindow(hwnd,nCmdshow);/nCmdshow为窗口显示形式标识为窗口显示形式标识5/30/202339(d)显示窗口(续)显示窗口(续)显示窗口后,调用显示窗口后,调用UpdateWindow更新更新并绘制用户区,并发出并绘制用户区,并发出WM_PAINT消消息
30、。息。UpdateWindow(hwnd);UpdateWindow(hwnd);5/30/202340(3)消息循环消息循环消息循环的常见格式如下:消息循环的常见格式如下:MSG Msg;MSG Msg;while(GetMessage(&Msg,NULL,0,0)while(GetMessage(&Msg,NULL,0,0)TranslateMessage(&Msg);TranslateMessage(&Msg);DispatchMessage(&Msg);DispatchMessage(&Msg);将消息的虚拟键将消息的虚拟键转换为字符信息转换为字符信息将消息传送到将消息传送到指定窗口函
31、数指定窗口函数从消息队列中读取从消息队列中读取一条消息,并将消一条消息,并将消息放在息放在MSG结构中结构中 其中函数其中函数GetMessage形式为:形式为:GetMessageGetMessage(lpMSG,lpMSG,/指向指向MSGMSG结构的指针结构的指针 hwnd,hwnd,nMsgFilteMin,/nMsgFilteMin,/用于消息过滤的最小消息号值用于消息过滤的最小消息号值 nMsgFilterMax/nMsgFilterMax/用于消息过滤的最大消息号值用于消息过滤的最大消息号值 )返回零值,即检索返回零值,即检索到到WM_QUITWM_QUIT消息,程消息,程序结束
32、循环并退出序结束循环并退出将消息传递给将消息传递给窗口函数的相窗口函数的相应过程处理应过程处理消消息息队队列列Windows将将产生的消息产生的消息WinMain函数函数5/30/2023412 窗口函数窗口函数WinProcWinProc函数由一个或多个函数由一个或多个switch语句组成。每一条语句组成。每一条case语语句对应一种消息,当应用程序接收到一个消息时,相应的句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。语句被激活并执行相应的响应程序模块。WinProc包含了对各种可能接收到的消息的处理过程包含了对各种可能接收到的消息的处理过程定
33、义了应用程序对接收到的不同消息的响应定义了应用程序对接收到的不同消息的响应5/30/202342窗口函数的一般形式如下: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 cas
34、e WM_DESTROYWM_DESTROY:PostQuitMessage(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_QUITW
35、M_QUIT消息,请求退出消息,请求退出处理函数处理函数:void void PostQuitMessage(int nExitCode)PostQuitMessage(int nExitCode)/nExitCode/nExitCode为应用程序的退出代码为应用程序的退出代码为未定义处理过程的消息提供缺省处理为未定义处理过程的消息提供缺省处理5/30/2023433数据类型数据类型 在在Windows.hWindows.h中定义了中定义了WindowsWindows 应用程序应用程序中包含种中包含种类繁多的数据类型,类繁多的数据类型,5/30/2023444 一些重要的数据结构一些重要的数据
36、结构MSG:包含一个消息的全部信息,是消息发送的格式:包含一个消息的全部信息,是消息发送的格式WINDCLASS:包含一个窗口类的全部信息及属性:包含一个窗口类的全部信息及属性POINT:定义了屏幕上或窗口中的一个点的:定义了屏幕上或窗口中的一个点的X和和 Y坐标坐标RECT:定义了一个矩形区域并及其左上角和右下角的坐标:定义了一个矩形区域并及其左上角和右下角的坐标几种几种重要重要的结的结构构5/30/2023453.4.3 应用程序举例应用程序举例【例【例3-1】应用程序窗口示例,本例的目】应用程序窗口示例,本例的目的在于说明创建的在于说明创建Windows窗口的方法及窗口的方法及过程。过程
37、。#include#include/包含应用程序中所需的数据类型和数据结构的定义包含应用程序中所需的数据类型和数据结构的定义LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);/LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);/窗口函数说明窗口函数说明/-/-以下初始化窗口类以下初始化窗口类-int WINAPI WinMain(int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hInstance,HINSTANCE hPrevInst,HINST
38、ANCE hPrevInst,LPSTR lpszCmdLine,LPSTR lpszCmdLine,int nCmdShowint nCmdShow)HWND hwnd;HWND hwnd;MSG Msg;MSG Msg;WNDCLASS wndclass;WNDCLASS wndclass;char lpszClassName=char lpszClassName=窗口窗口;/窗口类名窗口类名 char lpszTitle=My_Windows;char lpszTitle=My_Windows;/窗口标题名窗口标题名5/30/202346/窗口类的定义窗口类的定义wndclass.sty
39、le=0;wndclass.style=0;/窗口类型为缺省类型窗口类型为缺省类型wndclass.lpfnWndProc=WndProc;wndclass.lpfnWndProc=WndProc;/定义窗口处理函数定义窗口处理函数wndclass.cbClsExtra=0;wndclass.cbClsExtra=0;/窗口类无扩展窗口类无扩展wndclass.cbWndExtra=0;wndclass.cbWndExtra=0;/窗口实例无扩展窗口实例无扩展wndclass.hInstance=hInstance;wndclass.hInstance=hInstance;/当前实例句柄当前实
40、例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);/窗口的最小化图标为缺省图标窗口的最小化图标为缺省图标wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);/窗口采用箭头光标窗口采用箭头光标wndclass.hbrBackground=GetStockObject(wndclass.hbrBackground=GetStockObje
41、ct(WHITE_BRUSHWHITE_BRUSH););/窗口背景为白色窗口背景为白色wndclass.lpszMenuName=NULL;wndclass.lpszMenuName=NULL;/窗口中无菜单窗口中无菜单wndclass.lpszClassName=lpszClassName;wndclass.lpszClassName=lpszClassName;/窗口类名为窗口类名为 窗口窗口 5/30/202347/-/-以下进行窗口类的注册以下进行窗口类的注册-if(!RegisterClass(&wndclass)/if(!RegisterClass(&wndclass)/如果注册
42、失败则发出警告如果注册失败则发出警告 MessageBeep(0);MessageBeep(0);return FALSE;return FALSE;/-/-创建窗口创建窗口-hwnd=CreateWindowhwnd=CreateWindow(lpszClassName,lpszClassName,/窗口类名窗口类名lpszTitle,lpszTitle,/窗口实例的标题名窗口实例的标题名WS_OVERLAPPEDWINDOW,WS_OVERLAPPEDWINDOW,/窗口的风格窗口的风格CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFA
43、ULT,/窗口左上角坐标为缺省值窗口左上角坐标为缺省值CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,/窗口的高和宽为缺省值窗口的高和宽为缺省值NULL,NULL,/此窗口无父窗口此窗口无父窗口NULL,NULL,/此窗口无主菜单此窗口无主菜单hInstance,hInstance,/创建此窗口的应用程序的当前句柄创建此窗口的应用程序的当前句柄NULL NULL/不使用该值不使用该值););5/30/202348/-/-显示窗口显示窗口-ShowWindow(hwnd,nCmdShow);ShowWindow(hwnd,nCmdS
44、how);/-/-绘制用户区绘制用户区-UpdateWindow(hwnd);UpdateWindow(hwnd);/-/-消息循环消息循环-while(GetMessage(&Msg,NULL,0,0)while(GetMessage(&Msg,NULL,0,0)TranslateMessage(&Msg);TranslateMessage(&Msg);DispatchMessage(&Msg);DispatchMessage(&Msg);return Msg.wParam;return Msg.wParam;/消息循环结束即程序终止时将信息消息循环结束即程序终止时将信息返回系统返回系统 5
45、/30/202349/窗口函数窗口函数LRESULT CALLBACK WndProcLRESULT CALLBACK WndProc(HWND hwnd,HWND hwnd,UINT message,UINT message,WPARAM wParam,WPARAM wParam,LPARAM lParamLPARAM lParam)switch(message)switch(message)case WM_DESTROY:case WM_DESTROY:PostQuitMessage(0);PostQuitMessage(0);default:default:/缺省时采用系统消息缺省处理函数缺省时采用系统消息缺省处理函数return DefWindowProc(hwnd,message,wParam,lParam);return DefWindowProc(hwnd,message,wParam,lParam);return(0);return(0);调用调用PostQuitMessagePostQuitMessage发出发出WM_QUITWM_QUIT消息消息5/30/202350(第三章第三章)完完5/30/202351
限制150内