《windows应用程序基础(精品).ppt》由会员分享,可在线阅读,更多相关《windows应用程序基础(精品).ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3章章 Windows 应用程序基础应用程序基础1程序调试工具程序调试工具包括源程序语包括源程序语法检查、可执法检查、可执行程序修改和行程序修改和运行监视等运行监视等应用程序应用程序HelpHelp和和SetupSetup开发开发工具包工具包系统函数库和系统函数库和系统函数开发系统函数开发工具工具资源管理器资源管理器包括图形化窗包括图形化窗口及组成元素口及组成元素的多种对象的的多种对象的编辑器编辑器可选择并构成具体可选择并构成具体语句或源程序结构语句或源程序结构的例程库及的例程库及Help源程序编辑源程序编辑器和编译器器和编译器可视化开发可视化开发系统集成了一系系统集成了一系列系统可用资源
2、列系统可用资源和开发工具和开发工具一、一、Windows编程基础编程基础2采用交互式方法时,可视化开发平台给出了许多选用的采用交互式方法时,可视化开发平台给出了许多选用的对象对象,程序员,程序员可选择所需可选择所需对象对象并确定其属性,由此搭建起应用程序的并确定其属性,由此搭建起应用程序的“大框架大框架”,并可根据需要进一步编写必要的细节代码段,最后构成完整的并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程应用程序序Windows的的程序设计语言程序设计语言VCVBVJ都是都是“面向面向对象对象”的程序设计语言的程序设计语言对象对象是是Windows的规范部件的规范部件窗口窗口菜单
3、菜单按钮按钮对话框对话框程序模块程序模块编写编写Windows程序相当一部分工程序相当一部分工作是在创建作是在创建对象对象和和为为对象对象属性赋值属性赋值对象对象特征:具有规范形态和操作模式特征:具有规范形态和操作模式编程方法编程方法传统编写法传统编写法-API交互式方法交互式方法-MFC3APIAPI函数函数的功能的功能为应用程序为应用程序提提供供Windows系系统统特殊函数特殊函数及及数据结构数据结构Win应用程序应用程序可以利用标准可以利用标准大量大量API函数函数调用系统功能调用系统功能是是Win系统系统与与Win应用程序应用程序间的间的标准程序标准程序接口接口窗口管理函数窗口管理函
4、数实现窗口的创实现窗口的创建、移动和修建、移动和修改功能改功能系统服务函数系统服务函数:实现与操作系实现与操作系统有关的多种统有关的多种功能功能图形设备图形设备(GDI)函数函数:实现与:实现与设备无关的图设备无关的图形操作功能形操作功能4 利用利用WindowsWindows APIAPI函数编写函数编写WindowsWindows应用程序应用程序必必须首先了解以下内容:须首先了解以下内容:(1)(1)窗口的概念窗口的概念(2)(2)事件驱动的概念事件驱动的概念(3)(3)句柄句柄(4)(4)消息消息5(1)窗口窗口一个应用程序的窗口一般包含下列成分:一个应用程序的窗口一般包含下列成分:窗口
5、边界窗口边界工作区工作区控制菜单框控制菜单框下拉菜单下拉菜单水平滚动条水平滚动条垂直滚动条垂直滚动条最大化按钮最大化按钮最小化按钮最小化按钮标题栏标题栏6编写一个编写一个Windows应用程序应用程序首先应创建一个或多个窗口,随后应用首先应创建一个或多个窗口,随后应用程序的运行过程即是程序的运行过程即是窗口内部窗口内部、窗口与窗口窗口与窗口之间之间、窗口与系统窗口与系统之间之间进行进行数据处理与数据交换数据处理与数据交换的过程。的过程。应用程应用程序与用序与用户之间户之间交互的交互的接口环接口环境境系统管理系统管理应用程序应用程序的基本单位的基本单位Win应用程序应用程序基本的操作单元基本的操
6、作单元7Windows程序设计是针对程序设计是针对事件事件或或消息消息的处理进行的处理进行 消息消息是描述事是描述事件发生的信息件发生的信息(如按下鼠标或键盘如按下鼠标或键盘)事件驱动事件驱动编程方法对于编写编程方法对于编写交互式程序交互式程序很有用处,它避免很有用处,它避免了死板的操作模式了死板的操作模式Windows程序程序的执行顺序取决于事件发生的顺序,程序的的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的执行顺序是由顺序产生的消息消息驱动的,但是驱动的,但是消息消息的产生往的产生往往并不要求有次序之分。往并不要求有次序之分。(2)事件驱动事件驱动 8常用句柄类型及其说明常用
7、句柄类型及其说明句柄句柄是一个是一个4字节长的数值,用于标识应用字节长的数值,用于标识应用程序中不同的程序中不同的对象对象和和同类对象中不同的实同类对象中不同的实例例窗口窗口按钮按钮图标图标滚动条滚动条输出设备输出设备控制控制文件文件(3)句柄句柄应用程序通过应用程序通过句柄句柄访问相应访问相应的对象信息的对象信息HWNDHWND窗口句柄窗口句柄HDCHDC设备环境句柄设备环境句柄HBITMAPHBITMAP位图句柄位图句柄HCURSORHCURSOR光标句柄光标句柄HICONHICON图标句柄图标句柄HFONTHFONT字体句柄字体句柄HMENUHMENU菜单句柄菜单句柄HPENHPEN画笔
8、句柄画笔句柄HFILEHFILE文件句柄文件句柄HBRUSHHBRUSH画刷句柄画刷句柄HINSTANCEHINSTANCE 当前实例句柄当前实例句柄9 Windows应用程序应用程序利用利用Windows消息消息(Message)与应用程序及系统进行信息交换。与应用程序及系统进行信息交换。typedef struct tagMSGtypedef struct tagMSG HWNDHWND hwnd hwnd;窗口句柄,为窗口句柄,为null,则可检索所有驻留在消息队列中的消息则可检索所有驻留在消息队列中的消息 UINT message;UINT message;消息值,由消息值,由Wind
9、ows.h头文件中的宏定义来标识头文件中的宏定义来标识 WPARAMWPARAM wParam wParam;包含有关消息的附加信息包含有关消息的附加信息,不同消息其值有所不同不同消息其值有所不同 LPARAM LPARAM lParamlParam;DWORD time;DWORD time;指定消息送至队列的时间指定消息送至队列的时间 POINT pt;POINT pt;指定消息发送时屏幕光标的位置,指定消息发送时屏幕光标的位置,其数据类型其数据类型POINT也是一个结构体也是一个结构体MSG;MSG;消息号:由事先定义好的消息名标识消息号:由事先定义好的消息名标识字参数字参数(wPara
10、m):用于提供消息的用于提供消息的附加附加信息信息长字参数长字参数(lParam):用于提供消息的用于提供消息的附附加信息加信息消消息息附加信息附加信息与具体与具体消息号的值有关,消息号的值有关,在在Win中消息用中消息用结构体结构体MSG表示表示typedef struct tagPOINT typedef struct tagPOINT LONG xLONG x;LONG y;LONG y;POINTPOINT;(4)消息消息10(4)消息消息 VC中存在几种系统定义的消息分类,不同的前缀符号经常用于中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,系统定义的消
11、息宏前缀如下:消息宏识别消息附属的分类,系统定义的消息宏前缀如下:BM表示按钮控制消息表示按钮控制消息CB表示组合框控制消息表示组合框控制消息DM表示默认下压式按钮控制消息表示默认下压式按钮控制消息EM表示编辑控制消息表示编辑控制消息LB表示列表框控制消息表示列表框控制消息SBM表示滚动条控制消息表示滚动条控制消息WM表示窗口消息表示窗口消息窗口管理消息窗口管理消息初始化消息初始化消息输入消息输入消息系统消息系统消息剪贴板消息剪贴板消息控制处理消息控制处理消息控制通知消息控制通知消息滚动条通知消息滚动条通知消息非用户区消息非用户区消息MDI消息消息DDE消息消息应用程序自定义的消息应用程序自定
12、义的消息Windows编编程程常用消常用消息息11二、二、Windows应用程序常用消息应用程序常用消息1.WM_LBUTTONDOWN:产生单击鼠标左键的消息产生单击鼠标左键的消息此外,相似的消息还有:此外,相似的消息还有:lWM_LBUTTONUP:放开鼠标左键时产生;放开鼠标左键时产生;lWM_RBUTTONDOWN:单击鼠标右键时产生;单击鼠标右键时产生;lWM_RBUTTONUP:放开鼠标右键时产生;放开鼠标右键时产生;lWM_LBUTTONDBLCLK:双击鼠标左键时产生;双击鼠标左键时产生;lWM_RBUTTONDBLCLK:双击鼠标右键时产生。双击鼠标右键时产生。1Param高
13、字节高字节包含当前光标的包含当前光标的Y坐标坐标值值低字节低字节包含当前光标的包含当前光标的X坐标坐标值值wParam包含一整包含一整数值以标识鼠标键数值以标识鼠标键的的按下状态按下状态MK_LBUTTON按下鼠标左键按下鼠标左键MK_MBUTTON按下鼠标中键按下鼠标中键MK_RBUTTON按下鼠标右键按下鼠标右键122.WM_KEYDOWN:按下一个按下一个非系统键非系统键时产生的消息时产生的消息 系统键系统键是指实现系统操作的组合键,例如是指实现系统操作的组合键,例如Alt与某个功与某个功能键的组合以实现系统菜单操作等。能键的组合以实现系统菜单操作等。3.WM_ CHAR:按下一个按下一
14、个非系统键非系统键时产生的消息时产生的消息wParam 为为按键的按键的ASCII码码1Param 与与WM_KEYDOWN的相同的相同wParam:按下键的按下键的虚拟键码虚拟键码,用以标识按下或释放的键,用以标识按下或释放的键1Param:记录了按键的重复次数、扫描码、转移代码、先前键的状态记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息。等信息。相似的消息还有相似的消息还有WM_KEYUP,在放开非系统键时产生在放开非系统键时产生134.WM_CREATE:由由CreateWindow函数发出的消息函数发出的消息wParam:未用未用1Param:包含一个指向包含一个指向CRE
15、ATESTRUCT数据结构数据结构的指针的指针5.WM_CLOSE:关闭窗口时产生的消息关闭窗口时产生的消息wParam和和1Param均未用。均未用。6.WM_DESTROY:由由DestroyWiodow函数发出的消息或函数发出的消息或 用户关闭窗口时发出用户关闭窗口时发出wParam和和1Param均未用。均未用。147.WM_QUIT:由由PostQuitMessage函数发出的消息函数发出的消息退出应用程序时发出的消息退出应用程序时发出的消息wParam:含退出代码含退出代码,标识程序退出运行时的有关信息标识程序退出运行时的有关信息1Param:未用未用8.WM_PAINT用户区移动
16、或显示用户区移动或显示用户窗口改变大小用户窗口改变大小程序通过滚动条滚动窗口程序通过滚动条滚动窗口下拉式菜单关闭并需要恢复被覆盖的部分下拉式菜单关闭并需要恢复被覆盖的部分Windows清除对话框等对象,并需要恢复被覆盖的部分清除对话框等对象,并需要恢复被覆盖的部分均产生均产生WM_PAINTWM_PAINT消息消息15三、三、Windows中的事件驱动程序设计中的事件驱动程序设计启动启动输入姓名输入姓名输入第一次测试成绩输入第一次测试成绩输入第二次测试成绩输入第二次测试成绩输入第三次测试成绩输入第三次测试成绩计算平均成绩计算平均成绩结束结束过程驱动过程驱动方法计算平均成绩方法计算平均成绩启动启
17、动消息处理消息处理结束结束输入姓名输入姓名输入第一次成绩输入第一次成绩输入第二次成绩输入第二次成绩输入第三次成绩输入第三次成绩计算平均成绩计算平均成绩事件驱动事件驱动方法计算平均成绩方法计算平均成绩16Windows应用程序设计模式事件驱动Windows 应用程序的执行顺序取决于事件发生的顺序,描述事件发生的信息称为消息,而事件驱动程序设计则是围绕着消息的产生与处理而展开的。消息可以分为由硬件设备产生的输入消息和来自Windows系统的窗口管理消息发送消息send将消息直接发送给有关窗口函数指派消息post将消息指派到应用程序消息队列中17Windows应用程序设计模式事件驱动18四、四、Wi
18、ndows应用程序项目组成及编程步骤应用程序项目组成及编程步骤 1.应用程序项目的组成应用程序项目的组成一个完整的一个完整的Windows应用程序项目应用程序项目主要由主要由四种类型四种类型的文件组成的文件组成。1.C/C+1.C/C+语言源程序文件语言源程序文件2.2.头文件头文件3.3.资源描述文件资源描述文件4.4.项目文件项目文件192.源程序组成结构源程序组成结构入口函数入口函数WinMain窗口函数窗口函数WndProcWndProcWindows应用程序应用程序构成基构成基本框架本框架包含各种包含各种数据类型、数据类型、数据结构数据结构与函数等与函数等WinMain和和WinPr
19、oc是是Windows应用程序的主体应用程序的主体20(1)WinMain函数函数三个基本的组成部分三个基本的组成部分:函数说明函数说明、初始化初始化和和消息循环消息循环功能功能注册窗口类,建立窗口及执行必要的初始化注册窗口类,建立窗口及执行必要的初始化进入消息循环,据接受的消息调用相应的处理过程进入消息循环,据接受的消息调用相应的处理过程当消息循环检索到当消息循环检索到WM_QUIT时终止程序运行时终止程序运行WinMain函数函数WinMain函数说明函数说明WinMain函数的说明如下:函数的说明如下:intint WINAPI WINAPI WinMain WinMain(HINSTA
20、NCE HINSTANCE hThisInsthThisInst,应用程序当前实例句柄应用程序当前实例句柄 HINSTANCe hPrevInstHINSTANCe hPrevInst,应用程序其他实例句柄应用程序其他实例句柄 LPSTR LPSTR lpszCmdLinelpszCmdLine,指向程序命令行参数的指针指向程序命令行参数的指针 Int nCmdShowInt nCmdShow应用程序开始执行时窗口显示方式的整数值标识应用程序开始执行时窗口显示方式的整数值标识)注意!注意!Win是多任务管理的,同一应是多任务管理的,同一应用程序的多个窗口可能会同时存用程序的多个窗口可能会同时存
21、,Win系统对每个窗口的执行称为一个实例系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识并用一个实例句柄来唯一标识21(2)初始化初始化(a)窗口类定义窗口类定义 通过给窗口类数据结构通过给窗口类数据结构WNDCLASS赋值完成赋值完成,该数据结构中该数据结构中包含窗口类的各种属性。窗口类定义常用以下函数:包含窗口类的各种属性。窗口类定义常用以下函数:LoadIcon的作用是在应用程序中加载一个窗口图标。其原型为:的作用是在应用程序中加载一个窗口图标。其原型为:HICON HICON LoadIconLoadIcon(HINSTANCE(HINSTANCE hInstancehIn
22、stance,LPCTSTR,LPCTSTR lpIconNamelpIconName)图标资源名或系统预定义图标标识名图标资源名或系统预定义图标标识名图标资源所在的模块句柄,图标资源所在的模块句柄,NULLNULL则使用系统预定义图标则使用系统预定义图标初初始始化化显示窗口显示窗口创建窗口实例创建窗口实例窗口类的注册:窗口类必须先注册后使用窗口类的注册:窗口类必须先注册后使用窗口类的定义:定义窗口的形式与功能窗口类的定义:定义窗口的形式与功能LoadIconLoadIconLoadCursorLoadCursorGetStockObjectGetStockObjectRegisterClas
23、sRegisterClassCreateWindow ShowWindow ShowWindow,UpdateWindowUpdateWindow22LoadCursor的作用是在应用程序中加载一个窗口光标的作用是在应用程序中加载一个窗口光标HCURSOR HCURSOR LoadCursorLoadCursor(HINSTANCE(HINSTANCE hInstancehInstance,LPCTSTR LPCTSTR lpCursorNamelpCursorName)光标资源所在的模光标资源所在的模块句柄,块句柄,NULLNULL则使则使用系统预定义光标用系统预定义光标光标资源名或系统光标
24、资源名或系统预定义光标标识名预定义光标标识名应用程序调用函数应用程序调用函数GetStockObject获取系统提供的背景刷获取系统提供的背景刷HBRUSH HBRUSH GetStockObjectGetStockObject(int nBrushint nBrush););23(b)注册窗口类注册窗口类Win系统本身提供部分预定义的窗口类,程序员也可以自定义系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。窗口类的注册由函数窗口类,窗口类必须先注册后使用。窗口类的注册由函数RegisterClass()实现。实现。RegisterClassRegisterC
25、lass(&(&wndclasswndclass););/wndclasswndclass为窗口类结构为窗口类结构 RegisterClassRegisterClass函数的返回为函数的返回为布尔值布尔值,注册成功则返回,注册成功则返回真真24(c)创建窗口实例创建窗口实例创建一个窗口类的实例由函数创建一个窗口类的实例由函数CreateWindowCreateWindow()()实现实现函数原型如下:函数原型如下:HWND Create WindowHWND Create Window (LPCTSTRLPCTSTR lpszClassName lpszClassName,窗口类名窗口类名 L
26、PCTSTR LPCTSTR lpszTitlelpszTitle,窗口标题名窗口标题名 DWORDDWORD dwStyle dwStyle,创建窗口的样式创建窗口的样式 intint x,y,x,y,窗口左上角坐标窗口左上角坐标 int nWidthint nWidth,nHeightnHeight,窗口宽度和度高窗口宽度和度高 HWNDHWND hwndParent hwndParent,该窗口的父窗口句柄该窗口的父窗口句柄 HWENUHWENU hMenu hMenu,窗口主菜单句柄窗口主菜单句柄 HINSTANCEHINSTANCE hInstance hInstance,创建窗口的
27、应用程序当前句柄创建窗口的应用程序当前句柄 LPVOID LPVOID lpParam lpParam 指向一个传递给窗口的参数值的指针指向一个传递给窗口的参数值的指针 )2526(d)显示窗口显示窗口窗口类的显示由窗口类的显示由ShowWindow和和UpdateWindow函数实现。应用程序调函数实现。应用程序调用用ShowWindow函数在屏幕上显示窗口函数在屏幕上显示窗口ShowWindowShowWindow(hwndhwnd,nCmdshownCmdshow);/nCmdshow为窗口显示形式标识为窗口显示形式标识显示窗口后,应用程序调用显示窗口后,应用程序调用UpdateWind
28、ow更新并绘制用户更新并绘制用户区,并发出区,并发出WM_PAINT消息。消息。UpdateWindowUpdateWindow(hwndhwnd););27(3)消息循环消息循环消息循环的常见格式如下:消息循环的常见格式如下:MSGMSG Msg Msg;while(while(GetMessageGetMessage(&(&MsgMsg,NULL,0,0),NULL,0,0)TranslateMessageTranslateMessage(&(&MsgMsg););DispatchMessageDispatchMessage(&(&MsgMsg););将消息的虚拟键将消息的虚拟键转换为字符
29、信息转换为字符信息将消息传送到将消息传送到指定窗口函数指定窗口函数从消息队列中读取从消息队列中读取一条消息,并将消一条消息,并将消息放在息放在MSG结构中结构中 其中函数其中函数GetMessage形式为:形式为:GetMessageGetMessage(lpMSGlpMSG,/指向指向MSGMSG结构的指针结构的指针 hwndhwnd,nMsgFilteMinnMsgFilteMin,/,/用于消息过滤的最小消息号值用于消息过滤的最小消息号值 nMsgFilterMaxnMsgFilterMax/用于消息过滤的最大消息号值用于消息过滤的最大消息号值 )返回零值,即检索返回零值,即检索到到WM
30、_QUITWM_QUIT消息,程消息,程序结束循环并退出序结束循环并退出将消息传递给将消息传递给窗口函数的相窗口函数的相应过程处理应过程处理消消息息队队列列Windows将将产生的消息产生的消息WinMain函数函数282 窗口函数窗口函数WinProc WinProc函数由一个或多个函数由一个或多个switch语句组成。每一条语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应语句对应一种消息,当应用程序接收到一个消息时,相应的的case语句被激活并执行相应的响应程序模块。语句被激活并执行相应的响应程序模块。WinProc包含了对各种可能接收到的消息的处理过程包含了对各
31、种可能接收到的消息的处理过程定义定义了应用程序对接收到的不同消息的响应了应用程序对接收到的不同消息的响应29窗口函数的一般形式如下:窗口函数的一般形式如下:LRESULT CALLBACK LRESULT CALLBACK WndProcWndProc(HWND HWND hwndhwnd,UINT UINT messgaemessgae,WPARAM WPARAM wParamwParam,LPARAM,LPARAM lParamlParam)switch(message)switch(message)message message为标识的消息为标识的消息 case case break;b
32、reak;case case WM_DESTROYWM_DESTROY:PostQuitMessagePostQuitMessage(0);(0);default:default:return return DefWindowProcDefWindowProc(hwndhwnd,message,message,wParamwParam,lParamlParam););return(0);return(0);在消息处理程序段中一般都有对在消息处理程序段中一般都有对WM_DESTROYWM_DESTROY的处理的处理,该消息是关闭窗口时发出的。它向应用该消息是关闭窗口时发出的。它向应用程序发出程序
33、发出WM_QUITWM_QUIT消息,请求退出消息,请求退出处理函数处理函数:void void PostQuitMessagePostQuitMessage(int nExitCodeint nExitCode)/nExitCodenExitCode为应用程序的退出代码为应用程序的退出代码为未定义处理过程的消息提供缺省处理为未定义处理过程的消息提供缺省处理303数据类型数据类型 在在Windows.hWindows.h中中定义了定义了WindowsWindows 应用程序应用程序中包含种类繁中包含种类繁多的数据类型多的数据类型313数据类型数据类型 在在Windows.hWindows.h中
34、包含中包含了了WindowsWindows 应用程序应用程序种要用到的其种要用到的其他头文件,这些头文件的某些也包含了其他头文件。其中他头文件,这些头文件的某些也包含了其他头文件。其中最重要和最基本的是:最重要和最基本的是:头文件头文件说说 明明WINDEF.H基本类型定义基本类型定义WINNT.H支持支持Unicode的类型定义的类型定义WINBASE.H内核函数内核函数WINUSER.H 用户接口函数用户接口函数WINGDI.H图形设备接口函数图形设备接口函数324.一些重要的数据结构一些重要的数据结构MSG:包含一个消息的全部信息,是消息发送的格式包含一个消息的全部信息,是消息发送的格式
35、WINDCLASS:包含一个窗口类的全部信息及属性包含一个窗口类的全部信息及属性POINT:定义了屏幕上或窗口中的一个点的定义了屏幕上或窗口中的一个点的X和和 Y坐标坐标RECT:定义了一个矩形区域及其左上角和右下角的坐标定义了一个矩形区域及其左上角和右下角的坐标几几种种重重要要的的结结构构33WindowsWindows应用程序应用程序的的基本结构基本结构34Windows应用程序的基本结构当用户关闭窗口时,Windows系统将把WM_DESTROY消息发送给该窗口的窗口函数,在这种情况下,窗口函数应该使用PostQuitMessage函数将WM_QUIT消息发送到应用程序队列中,这样可以使
36、GetMessage函数检索到WM_QUIT消息,从而结束消息循环,退出应用程序。35WindowsWindows应用程序应用程序的的基本结构基本结构36五、应用程序举例五、应用程序举例【例例2-1】创建应用程序框架。本例的目的在于创建应用程序框架。本例的目的在于说明创建说明创建Windows应用程序的方法及过程应用程序的方法及过程#include#include/包含应用程序中所需的数据类型和数据结构的定义包含应用程序中所需的数据类型和数据结构的定义LRESULT CALLBACKLRESULT CALLBACK WndProc WndProc(HWND,UINT,WPARAM,LPARAM
37、);/(HWND,UINT,WPARAM,LPARAM);/窗口函数说明窗口函数说明/-/-以下初始化窗口类以下初始化窗口类 -intint WINAPI WINAPI WinMain WinMain(HINSTANCE HINSTANCE hInstancehInstance,HINSTANCE HINSTANCE hPrevInsthPrevInst,LPSTR LPSTR lpszCmdLinelpszCmdLine,int nCmdShowint nCmdShow)HWND HWND hwndhwnd;MSG MSG MsgMsg;WNDCLASS WNDCLASS wndclassw
38、ndclass;char char lpszClassNamelpszClassName=窗口窗口;/窗口类名窗口类名 char char lpszTitlelpszTitle=My_Windows;=My_Windows;/窗口标题名窗口标题名37/窗口类的定义窗口类的定义wndclasswndclass.style=0;.style=0;/窗口类型为缺省类型窗口类型为缺省类型wndclasswndclass.lpfnWndProclpfnWndProc=WndProcWndProc;/定义窗口处理函数定义窗口处理函数wndclasswndclass.cbClsExtracbClsExtra
39、=0;=0;/窗口类无扩展窗口类无扩展wndclasswndclass.cbWndExtracbWndExtra=0;=0;/窗口实例无扩展窗口实例无扩展wndclasswndclass.hInstancehInstance=hInstancehInstance;/当前实例句柄当前实例句柄wndclasswndclass.hIconhIcon=LoadIconLoadIcon(NULL,IDI_APPLICATION);(NULL,IDI_APPLICATION);/窗口的最小化图标为缺省图标窗口的最小化图标为缺省图标wndclasswndclass.hCursorhCursor=LoadCu
40、rsorLoadCursor(NULL,IDC_ARROW);(NULL,IDC_ARROW);/窗口采用箭头光标窗口采用箭头光标wndclasswndclass.hbrBackgroundhbrBackground=GetStockObjectGetStockObject(WHITE_BRUSHWHITE_BRUSH););/窗口背景为白色窗口背景为白色wndclasswndclass.lpszMenuNamelpszMenuName=NULL;=NULL;/窗口中无菜单窗口中无菜单wndclasswndclass.lpszClassNamelpszClassName=lpszClassNa
41、melpszClassName;/窗口类名为窗口类名为 窗口窗口 38/-/-以下进行窗口类的注册以下进行窗口类的注册 -if(!if(!RegisterClassRegisterClass(&(&wndclasswndclass)/如果注册失败则发出警告如果注册失败则发出警告 MessageBeepMessageBeep(0)(0);return FALSE;return FALSE;/-/-创建窗口创建窗口 -hwndhwnd=CreateWindowCreateWindow(lpszClassNamelpszClassName,/窗口类名窗口类名lpszTitlelpszTitle,/窗
42、口实例的标题名窗口实例的标题名WS_OVERLAPPEDWINDOW,WS_OVERLAPPEDWINDOW,/窗口的风格窗口的风格CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,/窗口左上角坐标为缺省值窗口左上角坐标为缺省值CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,/窗口的高和宽为缺省值窗口的高和宽为缺省值NULL,NULL,/此窗口无父窗口此窗口无父窗口NULL,NULL,/此窗口无主菜单此窗口无主菜单hInstancehInstance,/创建此窗口的应用
43、程序的当前句柄创建此窗口的应用程序的当前句柄NULL NULL/不使用该值不使用该值););39/-/-显示窗口显示窗口 -ShowWindowShowWindow(hwnd hwnd,nCmdShow nCmdShow););/-/-绘制用户区绘制用户区 -UpdateWindowUpdateWindow(hwndhwnd););/-/-消消 息息 循循 环环 -while(while(GetMessage GetMessage(&(&MsgMsg,NULL,0,0),NULL,0,0)TranslateMessageTranslateMessage(&(&MsgMsg););Dispatc
44、hMessageDispatchMessage(&(&MsgMsg););return Msg.return Msg.wParamwParam;/消息循环结束即程序终止时将信息返回系消息循环结束即程序终止时将信息返回系统统 40/窗口函数窗口函数LRESULT CALLBACK LRESULT CALLBACK WndProcWndProc(HWND HWND hwndhwnd,UINT message,UINT message,WPARAM WPARAM wParamwParam,LPARAM LPARAM lParamlParam)switch(message)switch(message
45、)case WM_DESTROY:case WM_DESTROY:PostQuitMessagePostQuitMessage(0);(0);default:default:/缺省时采用系统消息缺省处理函数缺省时采用系统消息缺省处理函数return return DefWindowProcDefWindowProc(hwndhwnd,message,message,wParamwParam,lParamlParam););return(0);return(0);调用调用PostQuitMessagePostQuitMessage发出发出WM_QUITWM_QUIT消息消息41windows程序设计学习方法阅读课本程序,从理解程序结构入手,逐渐理解Windows、应用程序、窗口函数之间的消息循环。彻底读懂样板程序,以后设计程序从它开始。对照查阅、了解各种API函数的功能、使用方法、适用场合必须学会使用“帮助”的“search”,以及“编辑”的“find in files”。学会阅读英语文档,才能了解各种函数的功能与用法。对示例程序作个别修改,观察效果函数中某些设置值的改动42
限制150内