第一章windows应用概述课件

上传人:无*** 文档编号:241649165 上传时间:2024-07-13 格式:PPT 页数:45 大小:253KB
返回 下载 相关 举报
第一章windows应用概述课件_第1页
第1页 / 共45页
第一章windows应用概述课件_第2页
第2页 / 共45页
第一章windows应用概述课件_第3页
第3页 / 共45页
点击查看更多>>
资源描述
Windows应用概述nWindows原理原理nWin32与与MFCn事件驱动与消息驱动事件驱动与消息驱动Windows原理nWindows-操作系统操作系统n什么是操作系统?什么是操作系统?n两大流派两大流派-unix和和windowsnUnixsolaris,bsd,linux和和macnWindowsos/2和和windowsn多任务、界面化、工具全、资料多多任务、界面化、工具全、资料多Microsoft提供的编程接口nWin32 API是微软的操作系统是微软的操作系统Windows提供给开发人员的编程接口,提供给开发人员的编程接口,它决定了我们开发的它决定了我们开发的Windows应用程序应用程序的能力。的能力。nMFC(Microsoft Foundation Class Library)是微软为开发人员提供的类库,)是微软为开发人员提供的类库,在某种意义上是对在某种意义上是对Win32 API的封装的封装 APIAPI函数函数的功能的功能为应用程序为应用程序提供提供Windows系系统统特殊函数特殊函数及及数据结构数据结构Win应用程序应用程序可以利用标准可以利用标准大量大量API函数函数调用系统功能调用系统功能是是Win系统系统与与Win应用程序应用程序间的间的标准程标准程序接口序接口窗口管理函数窗口管理函数实现窗口的创实现窗口的创建、移动和修建、移动和修改功能改功能系统服务函数系统服务函数:实现与操作系实现与操作系统有关的多种统有关的多种功能功能图形设备图形设备(GDI)函数函数:实现与设备无实现与设备无关的图形操作关的图形操作功能功能采用交互式方法时,可视化开发平台给出了许多选用的采用交互式方法时,可视化开发平台给出了许多选用的对象对象,程序员可,程序员可选择所需选择所需对象对象并确定其属性,由此搭建起应用程序的并确定其属性,由此搭建起应用程序的“大框架大框架”,并可,并可根据需要进一步编写必要的细节代码段,最后构成完整的根据需要进一步编写必要的细节代码段,最后构成完整的应用程序应用程序Windows的的程序设计语言程序设计语言VCVBVJ都是都是“面向面向对象对象”的程序设计语的程序设计语言言对象对象是是Windows的规范部件的规范部件窗口窗口菜单菜单按钮按钮对话框对话框程序模块程序模块编写编写Windows程序相当一部分工程序相当一部分工作是在创建作是在创建对象对象和和为为对象对象属性赋值属性赋值对象对象特征:具有规范形态和操作模式特征:具有规范形态和操作模式编程方法编程方法传统编写法传统编写法-API交互式方法交互式方法-MFCWin32的来源nMicrosoft 32位平台的应用程序编程接口位平台的应用程序编程接口(Application Programming Interface)。)。Mircrosoft的所有的所有32位平台都支持统一的位平台都支持统一的API,包括函数、结构、消息、宏及接口。,包括函数、结构、消息、宏及接口。n基于基于Win32 API所开发的应用程序可以充分挖所开发的应用程序可以充分挖掘掘Windows的的32位操作系统的潜力,在能成位操作系统的潜力,在能成功运行在各种平台上之外,也可以充分利用每功运行在各种平台上之外,也可以充分利用每个平台特有的功能和属性。(受平台限制)个平台特有的功能和属性。(受平台限制)Win32 API的分类n窗口管理窗口管理n窗口通用控制窗口通用控制nShell特性特性n图形设备接口图形设备接口n系统服务系统服务n国际特性国际特性n网络服务网络服务Win32数据类型 nHANDLE 32位位无符号的整数无符号的整数,句柄句柄 nHINSTANCE 32位位的的无符号整数无符号整数,实例句柄实例句柄 nHWND 32位位的的无符号整数无符号整数,窗口句柄窗口句柄 nHDC 设备描述背景的句柄设备描述背景的句柄 nLONG 32位位带符号整数带符号整数 nLPSTR 线性的线性的32位位字符串指针字符串指针 nWCHAR 16位位的的UNICODE字符字符编写Windows应用程序之要点n(1)窗口的概念窗口的概念n(2)事件驱动的概念事件驱动的概念n(3)句柄句柄n(4)消息消息窗口n系统管理应用程序的基本单位系统管理应用程序的基本单位n应用程序与用户之间交互的接口环境应用程序与用户之间交互的接口环境nWin应用程序基本的操作单元应用程序基本的操作单元n编写一个编写一个Windows应用程序首先应创建应用程序首先应创建一个或多个窗口,随后应用程序的运行一个或多个窗口,随后应用程序的运行过程即是过程即是窗口内部、窗口与窗口之间、窗口内部、窗口与窗口之间、窗口与系统之间窗口与系统之间进行数据处理与数据交进行数据处理与数据交换的过程。换的过程。窗口边界窗口边界工作区工作区控制菜单框控制菜单框下拉菜单下拉菜单水平滚动条水平滚动条垂直滚动条垂直滚动条最大化按钮最大化按钮最小化按钮最小化按钮标题栏标题栏事件驱动nWindows程序设计是针对事件或消息的程序设计是针对事件或消息的处理,消息是描述事件发生的信息处理,消息是描述事件发生的信息(如按如按下鼠标或键盘下鼠标或键盘)nWindows程序的执行顺序取决于事件发程序的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往生的消息驱动的,但是消息的产生往往并不要求有次序之分。并不要求有次序之分。n事件驱动编程方法事件驱动编程方法-交互式程序。交互式程序。句柄n句柄是一个句柄是一个4字节长的数值,用于标识应字节长的数值,用于标识应用程序中不同的对象和同类对象中不同用程序中不同的对象和同类对象中不同的实例的实例n应用程序通过句柄访问相应的对象信息应用程序通过句柄访问相应的对象信息n常用窗口按钮图标滚动条输出设备控制常用窗口按钮图标滚动条输出设备控制文件文件常用句柄类型及其说明常用句柄类型及其说明HWNDHWND窗口句柄窗口句柄HDCHDC设备环境句设备环境句柄柄HBITMAPHBITMAP位图句柄位图句柄HCURSORHCURSOR光标句柄光标句柄HICONHICON图标句柄图标句柄HFONTHFONT字体句柄字体句柄HMENUHMENU菜单句柄菜单句柄HPENHPEN画笔句柄画笔句柄HFILEHFILE文件句柄文件句柄HBRUSHHBRUSH画刷句柄画刷句柄HINSTANCEHINSTANCE 当前实例句柄当前实例句柄消息n WindowsWindows应用程序应用程序利用利用WindowsWindows消息消息(Message)(Message)与应用程序及系统进行信息交与应用程序及系统进行信息交换。换。n消息的组成:消息的组成:n消息号:由事先定义好的消息名标识消息号:由事先定义好的消息名标识n字参数字参数 :用于提供消息的附加信息:用于提供消息的附加信息n长字参数:用于提供消息的附加信息长字参数:用于提供消息的附加信息typedef struct tagMSG HWND hwnd;窗口句柄,为窗口句柄,为null,则可检索所有驻留在消息队列中的消息,则可检索所有驻留在消息队列中的消息 UINT message;消息值,由消息值,由Windows.h头文件中的宏定义来标识头文件中的宏定义来标识 WPARAM wParam;包含有关消息的附加信息包含有关消息的附加信息,不同消息其值有所不同不同消息其值有所不同 LPARAM lParam;DWORD time;指定消息送至队列的时间指定消息送至队列的时间 POINT pt;指定消息发送时屏幕光标的位置,指定消息发送时屏幕光标的位置,数据类型数据类型POINT也是一个结构体也是一个结构体MSG;附加信息附加信息与具体与具体消息号的值有关,消息号的值有关,在在Win中消息用中消息用结构体结构体MSG表示表示typedef struct tagPOINT typedef struct tagPOINT LONG xLONG x;LONG y;LONG y;POINTPOINT;Windows常用消息窗口管理消息窗口管理消息初始化消息初始化消息输入消息输入消息系统消息系统消息剪贴板消息剪贴板消息控制处理消息控制处理消息控制通知消息控制通知消息滚动条通知消息滚动条通知消息非用户区消息非用户区消息MDI消息消息DDE消息消息应用程序自定义的消息应用程序自定义的消息MFC-编程框架nMFC 中的各种类结合起来构成了一个应用程序框架,中的各种类结合起来构成了一个应用程序框架,用以让程序员建立用以让程序员建立Windows下的应用程序,相对下的应用程序,相对SDK来说更为简单的方法。来说更为简单的方法。n具体来说,具体来说,MFC框架定义了应用程序的轮廓,并提供框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有过预定义的接口把具体应用程序特有 的东西填入这个的东西填入这个轮廓。轮廓。nMicrosoft Visual C+提供了相应的工具来完成这个提供了相应的工具来完成这个工作:工作:AppWizard可以用来生成初步的框架文件(代可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户码和资源等);资源编辑器用于帮助直观地设计用户接口;接口;ClassWizard用来协助添加代码到框架文件;用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑最后,编译,则通过类库实现了应用程序特定的逻辑。封装封装 n构成构成MFC框架的是框架的是MFC类库,一种类库,一种C+类库,具有明类库,具有明显封装性质的类库:显封装性质的类库:n(1)对)对Win32应用程序编程接口的封装:用一个应用程序编程接口的封装:用一个C+Object来包装一个来包装一个Windows Object。n(2)对应用程序概念的封装:)对应用程序概念的封装:MFC把把win32中许多有含义的中许多有含义的处理序列封装起来,替程序员完成这些工作。另外,处理序列封装起来,替程序员完成这些工作。另外,MFC提提出了以文档出了以文档-视图为中心的编程模式,视图为中心的编程模式,MFC类库封装了对它的类库封装了对它的支持。支持。n(3)对)对COM/OLE特性的封装:特性的封装:MFC的的OLE类封装了类封装了OLE API大量的复杂工作,这些类提供了实现大量的复杂工作,这些类提供了实现OLE的更高级接口。的更高级接口。n(4)对)对ODBC功能的封装:以少量的能提供与功能的封装:以少量的能提供与ODBC之间更之间更高级接口的高级接口的C+类,封装了类,封装了ODBC API的大量的复杂的工作,的大量的复杂的工作,提供了一种数据库编程模式。提供了一种数据库编程模式。n几个概念的解释几个概念的解释继承承 nMFC抽象出众多类的共同特性,设计出一些基类作为抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。其中,最重要的类是实现其他类的基础。其中,最重要的类是CObject和和CCmdTarget。nCObject是是MFC的根类,绝大多数的根类,绝大多数MFC类是其派生的,包括类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从所有从CObject派生的类都将具备或者可以具备派生的类都将具备或者可以具备CObject所拥所拥有的特性。有的特性。nCCmdTarget通过封装一些属性和方法,提供了消息处理的通过封装一些属性和方法,提供了消息处理的架构。架构。MFC中,任何可以处理消息的类都从中,任何可以处理消息的类都从CCmdTarget派派生。生。n对每种性质不同的对象(窗口、应用程序、文档等),对每种性质不同的对象(窗口、应用程序、文档等),MFC都设计了一组类对这些对象进行封装,每一组类都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。例如:都有一个基类,从基类派生出众多更具体的类。例如:CWnd、CwinThread、Cdocument等。等。虚拟函数和动态约束 nMFC以以“C+”为基础,必然支持虚拟函数和为基础,必然支持虚拟函数和动态约束。但为了避免导致虚拟函数表过于臃动态约束。但为了避免导致虚拟函数表过于臃肿(消耗内存、效率低下),肿(消耗内存、效率低下),MFC建立了消息建立了消息映射机制,以富有效率、便于使用的手段解决映射机制,以富有效率、便于使用的手段解决消息处理函数的动态约束问题。消息处理函数的动态约束问题。n通过虚拟函数和消息映射,通过虚拟函数和消息映射,MFC类提供了丰富类提供了丰富的编程接口。程序员继承基类的同时,把自己的编程接口。程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入实现的虚拟函数和消息处理函数嵌入MFC的编的编程框架。程框架。MFC编程框架将在适当的时候、适当编程框架将在适当的时候、适当的地方来调用程序的代码。的地方来调用程序的代码。MFC的宏观框架体系n如前所述,如前所述,MFC实现了对应用程序概念的封装,把类、实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。(或者说模式)。n针对不同的应用和目的,程序员采用不同的模板。例针对不同的应用和目的,程序员采用不同的模板。例如,如,SDI应用程序的模板,应用程序的模板,MDI应用程序的模板,规应用程序的模板,规则则DLL应用程序的模板,扩展应用程序的模板,扩展DLL应用程序的模板,应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。应用程序的模板,等等。n这些模板都采用了以文档这些模板都采用了以文档-视为中心的思想,每一个模视为中心的思想,每一个模板都包含一组特定的类。典型的板都包含一组特定的类。典型的MDI应用程序的构成应用程序的构成将在下一节具体讨论。将在下一节具体讨论。了解MFC机理的作用n内部机制有助于写出功能灵活而强大的程序。内部机制有助于写出功能灵活而强大的程序。n为了实现消息映射机制,为了实现消息映射机制,MFC编程框架必须要保证编程框架必须要保证首先得到消息,然后按既定的方法进行处理。首先得到消息,然后按既定的方法进行处理。n为了实现对为了实现对DLL编程的支持和多线程编程的支持,编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。线程状态等来管理一些重要信息。nMFC内部处理对程序员来说是透明的。内部处理对程序员来说是透明的。MFC特性总结nMFC封装了封装了Win32 API,OLE API,ODBC API等底等底层函数的功能,并提供更高一层的接口,简化了编程。层函数的功能,并提供更高一层的接口,简化了编程。同时,同时,MFC支持对底层支持对底层API的直接调用。的直接调用。nMFC提供了一个提供了一个Windows应用程序开发模式,对程序应用程序开发模式,对程序的控制主要是由的控制主要是由MFC框架完成,还覆盖大部分的功能,框架完成,还覆盖大部分的功能,例如,预定义或实现了许多事件和消息处理。框架或例如,预定义或实现了许多事件和消息处理。框架或者由其本身处理事件,不依赖程序员的代码;或者调者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。用程序员的代码来处理应用程序特定的事件。nMFC是是C+类库,程序员通过使用、继承和扩展适当类库,程序员通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是类处理。实现这种功能的基础是C+对继承的支持,对继承的支持,对虚拟函数的支持,以及对虚拟函数的支持,以及MFC实现的消息映射机制。实现的消息映射机制。MFCMFC还很好地保持了程序的向下兼容性还很好地保持了程序的向下兼容性是用来编是用来编写写WindowsWindows应用程序应用程序的的C+C+类集类集以层次结构组织以层次结构组织封装了大部分封装了大部分APIAPI函数函数提供了图形环境下应用程序的框架提供了图形环境下应用程序的框架提供了创建应用程序的组件提供了创建应用程序的组件提供了大量的基类供程序员根据不同的应用环境进行扩充提供了大量的基类供程序员根据不同的应用环境进行扩充允许在编程过程中自定义和扩展应用程序中的类允许在编程过程中自定义和扩展应用程序中的类较好的移植性,较好的移植性,可移植于众多的平台可移植于众多的平台MFCMFC下图是下图是MFCMFC应用程序框架结构类的继承关系应用程序框架结构类的继承关系。MFC应用程序框架用程序框架结构构类1.CObject1.CObject类类 CObjectCObject是是MFCMFC类类库库的的根根类类,它它几几乎乎描描述述了了所所有有MFCMFC类类的的一一些些公公共共特特性性,并并且且给给所所有有由由它它派派生生出出的的类类提提供供了了3 3种种重重要要特特性性,即:串行化支持、运行时类信息支持以及诊断和调试支持。即:串行化支持、运行时类信息支持以及诊断和调试支持。2.CCmdTarget2.CCmdTarget类类 命命令令类类CCmdTargetCCmdTarget是是CObjectCObject的的子子类类,它它是是MFCMFC库库中中所所有有具具有有消消息息映映射射属属性性的的类类的的公公共共基基类类。从从CCmdTargetCCmdTarget派派生生的的类类能能在程序运行时动态创建对象和处理命令消息。在程序运行时动态创建对象和处理命令消息。3.CWinApp3.CWinApp类类 应应用用程程序序类类CWinAppCWinApp是是CWinThreadCWinThread的的子子类类,封封装装了了初初始始化化、运行、终止应用程序的代码。可以由此派生自己的应用类。运行、终止应用程序的代码。可以由此派生自己的应用类。4.CWnd4.CWnd类类 窗窗口口类类CWndCWnd提提供供了了MFCMFC中中所所有有窗窗口口类类的的基基本本功功能能。从从CWndCWnd派生的类可以拥有自己的窗口,并对它进行控制。派生的类可以拥有自己的窗口,并对它进行控制。5.CView5.CView类类 视视图图类类CViewCView是是CWndCWnd类类的的子子类类。视视图图类类及及其其派派生生类类用用于于管管理框架窗口的客户区。理框架窗口的客户区。6.CDocument6.CDocument类类 文文档档类类CDocumentCDocument负负责责装装载载和和维维护护文文档档。文文档档包包括括应应用用程程序序的的工工作作成成果果或或环环境境设设置置数数据据等等,可可以以是是程程序序需需要要保保存存的的任任何内容。何内容。7.CFrameWnd7.CFrameWnd类类 CFrameWndCFrameWnd类类是是CWndCWnd类类的的派派生生类类。它它是是所所有有其其他他框框架架窗窗口口类类的的基基类类,主主要要用用来来管管理理一一个个窗窗口口,可可以以认认为为它它取取代代了了SDKSDK应应用用程程序序中中窗窗口口处处理理函函数数WndProc(WndProc()的的地地位位。CFrameWndCFrameWnd类类的的对对象象是是一一个个框框架架窗窗口口,包包括括边边框框、标标题题栏栏、菜菜单单、最最大大化化按按钮钮、最最小小化化按按钮钮和和一一个个激激活活的的视视图图。CFrameWndCFrameWnd类类支支持持单单文文档档界界面面,对对于于多多文文档档界界面面,使使用用它它的的两两个个派派生生类类CMDIFrameWndCMDIFrameWnd和和CMDIChildWndCMDIChildWnd。CMDIFrameWndCMDIFrameWnd类类 用用 于于 MDIMDI的的 主主 窗窗 口口,CMDIChildWndCMDIChildWnd类用于类用于MDIMDI的子窗口。的子窗口。CFrameWndCFrameWnd类类提提供供了了若若干干个个成成员员函函数数,用用于于获获得得和和设设置置活活动文档、视图、图文框、标题栏、状态栏等操作。动文档、视图、图文框、标题栏、状态栏等操作。消息和事件n Windows是一个基于事件的消息是一个基于事件的消息(message)驱动系统,驱动系统,Windows应用程序是按照应用程序是按照“事件事件消息消息处理处理”非顺序的机制运行的。非顺序的机制运行的。n 所谓消息,就是用于描述某个事件发生的信所谓消息,就是用于描述某个事件发生的信息息,而事件是对于,而事件是对于Windows的某种操作,事的某种操作,事件和消息密切相关,件和消息密切相关,事件是因,消息是果,事事件是因,消息是果,事件产生消息,消息对应事件件产生消息,消息对应事件。消息的处理n所谓所谓消息的处理消息的处理,其实质就是事件的处,其实质就是事件的处理。当有某个事件理。当有某个事件(如单击鼠标、键盘输如单击鼠标、键盘输入和执行菜单命令等入和执行菜单命令等)发生时,发生时,Windows会根据具体的事件产生对应的会根据具体的事件产生对应的消息,并发送到指定应用程序的消息队消息,并发送到指定应用程序的消息队列。应用程序从消息队列中取出消息,列。应用程序从消息队列中取出消息,并根据不同的消息进行不同的处理。并根据不同的消息进行不同的处理。事件驱动程序设计n事件驱动程序设计,不是由事件的顺序事件驱动程序设计,不是由事件的顺序来控制,而是由事件的发生来控制。来控制,而是由事件的发生来控制。n事件特点:发生是随机的、不确定的,并没事件特点:发生是随机的、不确定的,并没有预定的顺序,允许程序的的用户用各种合有预定的顺序,允许程序的的用户用各种合理的顺序来安排程序的流程。理的顺序来安排程序的流程。n擅长领域:对于需要用户交互的应用程序来擅长领域:对于需要用户交互的应用程序来说,相比过程驱动方法无法替代的优点。说,相比过程驱动方法无法替代的优点。事件驱动过程消息驱动模型过程过程1 1开始开始过程过程2 2.过程过程n n结束结束过程驱动编程模型过程驱动编程模型过程驱动编程模型过程驱动编程模型消息消息消息消息处理处理处理处理事件事件1事件事件2事件事件3.事件事件n开始开始开始开始结束结束结束结束事件驱动编程模型事件驱动编程模型事件驱动编程模型事件驱动编程模型Windows消息机制n事件驱动是靠消息循环机制来实现的。事件驱动是靠消息循环机制来实现的。n事件驱动围绕着消息的产生与处理展开。事件驱动围绕着消息的产生与处理展开。n一条消息是关于发生的事件的消息。一条消息是关于发生的事件的消息。nWindows的消息机制实现:的消息机制实现:n系统中所发生的任何活动被当作事件来处理。系统中所发生的任何活动被当作事件来处理。n对于所发生的每一个事件,对于所发生的每一个事件,Windows将其转换成将其转换成消息的形式放在一个称为消息的形式放在一个称为消息队列消息队列的内存区中。的内存区中。nWindows的消息发送程序负责选择适合的对象,的消息发送程序负责选择适合的对象,将消息队列中的消息发送到欲接受消息的对象上。将消息队列中的消息发送到欲接受消息的对象上。Windows消息机制n应用程序通过执行一段称为应用程序通过执行一段称为消息循环的代码消息循环的代码来轮询应用来轮询应用程序的消息队列,从中检索出该程序要处理的消息,并程序的消息队列,从中检索出该程序要处理的消息,并立即消息发送到有关的对象上。立即消息发送到有关的对象上。MSGmsg;while(GetMessage(&msg,NULL,0,0L)TranslateMessage(&msg);DispatchMessage(&msg);消息类型n输入消息输入消息:对键盘和鼠标输入作反应。这:对键盘和鼠标输入作反应。这类输入消息首先放在系统消息队列中,然类输入消息首先放在系统消息队列中,然后后Windows将它们送入应用程序的消息将它们送入应用程序的消息队列,使消息得到处理。队列,使消息得到处理。n控制消息控制消息:用来与:用来与Windows的特殊控制的特殊控制对象,例如,对话框、列表框、按钮等进对象,例如,对话框、列表框、按钮等进行双向通信。这类消息一般不通过应用程行双向通信。这类消息一般不通过应用程序的消息队列,而是直接发送到控制对象序的消息队列,而是直接发送到控制对象上。上。消息类型n系统消息系统消息:对程式化的事件或系统时钟中断作:对程式化的事件或系统时钟中断作出反应。有些系统消息(例如,程序间进行数出反应。有些系统消息(例如,程序间进行数据交换)要通过据交换)要通过Windows的系统消息队列。的系统消息队列。而有些系统消息,例如窗口的创建及删除等消而有些系统消息,例如窗口的创建及删除等消息直接送入应用程序的消息队列。息直接送入应用程序的消息队列。n用户消息用户消息:通常由程序员创建的,消息只从应:通常由程序员创建的,消息只从应用程序的某一部分进入到该应用程序的另一部用程序的某一部分进入到该应用程序的另一部分而被处理,不会离开应用程序。用户消息经分而被处理,不会离开应用程序。用户消息经常用来处理选单操作:一个用户消息与选单中常用来处理选单操作:一个用户消息与选单中的一选项相对应,当它在应用程序队列中出现的一选项相对应,当它在应用程序队列中出现时被处理。时被处理。1 1标准标准WindowsWindows消息消息 (1)(1)键键盘盘消消息息:与与键键盘盘某某个个键键的的动动作作相相关关联联。常常见见的的键键盘盘消消息息有有WM_KEYDOWNWM_KEYDOWN、WM_KEYUPWM_KEYUP:非非系系统统键键的的按按下下和和释释放放。WM_CHARWM_CHAR:输入非系统字符时产生的消息。:输入非系统字符时产生的消息。消息的类别及其描述 (2)(2)鼠鼠标标消消息息:涉涉及及鼠鼠标标的的单单击击、双双击击、拖拖动动等等。例例如如,WM_MOUSEMOVEWM_MOUSEMOVE、WM_RBUTTONDOWNWM_RBUTTONDOWN、WM_LBUTTONDOWNWM_LBUTTONDOWN、WM_LBUTTONDBLCLICKWM_LBUTTONDBLCLICK:鼠鼠标标移移动动时时、右右左左键键按按下下时时、双双击击时产生的消息。时产生的消息。(3)(3)窗窗口口消消息息:窗窗口口消消息息一一般般与与创创建建窗窗口口、绘绘制制窗窗口口、移移动动窗窗口口和和销销毁毁窗窗口口等等动动作作有有关关。在在MFCMFC应应用用程程序序中中,窗窗口口消息是由视图类、窗口类及它们的派生类处理的。消息是由视图类、窗口类及它们的派生类处理的。2.2.控件消息控件消息 控控件件消消息息是是指指控控件件或或其其他他子子窗窗口口向向父父窗窗口口发发送送的的WM_COMMANDWM_COMMAND消消息息。发发送送控控件件消消息息的的控控件件使使用用唯唯一一的的IDID号号来来识识别别,使使用用控控件件类类来来操操纵纵。从从控控件件传传给给系系统统的的消消息息,它它的的前前缀缀的的最最后后一一个个字字符符为为N N;由由系系统统发发送送给给控控件件的的消消息息,其其前前缀缀的的最最后一个字符为后一个字符为M M。3.3.命令消息命令消息 命命令令消消息息是是由由菜菜单单项项、工工具具栏栏按按钮钮、快快捷捷键键等等用用户户界界面面对对象象发发出出的的WM_COMMANDWM_COMMAND消消息息。命命令令消消息息与与其其他他消消息息不不同同,它它可可被被更更广广泛泛的的对对象象如如文文档档、文文档档模模板板、应应用用程程序序对对象象、窗窗口口和视图等处理。和视图等处理。MFCMFC采采用用消消息息映映射射来来处处理理消消息息。这这种种消消息息映映射射机机制制包包括括一一组组消消息息映映射射宏宏,用用于于把把一一个个WindowsWindows消消息息和和其其消消息息处处理理函函数数联联系系起起来来。MFCMFC应应用用程程序序框框架架提提供供了了消消息息映映射射功功能能,所所有有从从CCmdTargetCCmdTarget类派生出来的类都能够拥有自己的消息映射。类派生出来的类都能够拥有自己的消息映射。与与MFCMFC消消息息映映射射机机制制有有关关的的宏宏有有以以下下3 3个个:DECLARE_MESSAGE_MAPDECLARE_MESSAGE_MAP()宏宏、BEGIN_MESSAGE_MAP(MyClass,BEGIN_MESSAGE_MAP(MyClass,MybaseClass)MybaseClass)宏宏 和和 END_MESSAGE_MAPEND_MESSAGE_MAP()()宏。宏。MFC消息映射机制 首首先先在在类类定定义义的的结结尾尾用用DECLARE_MESSAGE_MAP(DECLARE_MESSAGE_MAP()宏宏来来声声明明使使用用消消息息映映射射,该该宏宏表表示示在在为为各各个个处处理理函函数数所所写写的的类类声声明之后存在消息映射条目,这些函数是该类的成员函数。明之后存在消息映射条目,这些函数是该类的成员函数。然然 后后 在在 类类 的的 实实 现现 源源 文文 件件 中中 用用 BEGIN_MESSAGE_MAP(BEGIN_MESSAGE_MAP()和和 END_MESSAGE_MAPEND_MESSAGE_MAP()宏宏来来定定义义消消息息映映射射。MFCMFC应应用用程程序序MESSAG_MAPMESSAG_MAP消消息息映映射射的形式如下所示:的形式如下所示:BEGIN_MESSAGE_MAP(the class,the base class)/AFX_MSG_MAP(MyClass)/ClassWizard维护消息映射宏的标记 ON_./MFC预定义消息映射宏 ON_MESSAGE(message,memberFun)/用户自定义消息映射宏 /AFX_MSG_MAPEND_MESSAGE_MAP()使用方式 利利用用MFCMFC编编程程时时一一般般直直接接采采用用ClassWizardClassWizard类类向向导导添添加加消消息息和和消消息息处处理理函函数数,而而有有时时需需要要程程序序员员通通过过在在相相应应层层次次上上定定义义消消息息和和消消息息处处理理函函数数来来实实现现自自己己的的程程序序功功能能,这这时时需需要自己定义消息名、分配要自己定义消息名、分配IDID值及完成消息映射的工作值及完成消息映射的工作。WindowsWindows将将所所有有的的消消息息值值分分为为4 4段段:0 x00000 x00000 x03FF0 x03FF消消息息值值范范围围段段用用于于WindowsWindows系系统统消消息息,0 x04000 x04000 x7FFF0 x7FFF段段用用于于用用户户自自定定义义的的窗窗口口消消息息,0 x80000 x80000 xBFFF0 xBFFF段段为为WindowsWindows保保留留值值,0 xC0000 xC0000 xFFFF0 xFFFF段用于应用程序的字符串消息。段用于应用程序的字符串消息。自定义消息处理 常常量量WM_USER(WM_USER(为为0 x0400)0 x0400)与与第第一一个个自自定定义义消消息息值值相相对对应应,用用户户必必须须为为自自己己的的消消息息定定义义相相对对于于WM_USERWM_USER的的偏偏移移值值,利利用用#define#define语语句句直直接接定定义义自自己己的消息,如下所示:的消息,如下所示:#define WM_USER WM_USER+3/自定义消息WM_USER 也也可可以以调调用用窗窗口口消消息息注注册册函函数数RegisterWindowMessage(RegisterWindowMessage()来来定定义义一一个个WindowsWindows消息,由系统分配消息一个整数值。该函数原型为:消息,由系统分配消息一个整数值。该函数原型为:UINT RegisterWindowMessage(LPCTSTR lpString);其中参数其中参数lpStringlpString是要定义的消息名,调用成功后将返回该消息的是要定义的消息名,调用成功后将返回该消息的IDID值。值。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!