1 / 20

Visual C++ 程序设计

Visual C++ 程序设计. 武汉职业技术学院计算机科学系. 万 彪 2004.12. 第六章 消息处理. 本 章 内 容. 1 、 Windows 程序中的消息. 2 、消息映射. 3 、使用 Class Wizard 管理消息和命令. 4 、程序实例. 6.1 Windows 程序中的消息. 6.1.1 Windows 程序中的消息分类 6.1.2 Windows 中常用消息 6.1.3 消息处理函数. 6.1.1 Windows 程序中的消息分类. 1 、窗口消息. 窗口消息 一般与 创建窗口、绘制窗口、移动窗口和销毁窗口

eytan
Download Presentation

Visual C++ 程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Visual C++程序设计 武汉职业技术学院计算机科学系 万 彪 2004.12

  2. 第六章 消息处理 本 章 内 容 1、Windows程序中的消息 2、消息映射 3、使用Class Wizard管理消息和命令 4、程序实例

  3. 6.1 Windows程序中的消息 6.1.1 Windows程序中的消息分类 6.1.2 Windows中常用消息 6.1.3 消息处理函数

  4. 6.1.1 Windows程序中的消息分类 1、窗口消息 窗口消息一般与创建窗口、绘制窗口、移动窗口和销毁窗口 的动作有关。这类消息的一般形式为:WM_XXX,其中 XXX内容与窗口消息的内容相关。 窗口消息只能被窗口或视图对象处理。在MFC应用程序中, 视图类和窗口类及其派生类能够处理窗口消息。窗口消息 往往带有参数,其参数wParam和lParam在不同的消息中具 有不同的含义。

  5. 6.1.1 Windows程序中的消息分类 2、命令消息 命令消息是指由用户交互对象发送的WM_COMMAND通 知消息。用户交互对象是指菜单、工具条的按钮、快捷键等。 MFC中凡是从基类CCmdTarget派生的类都能处理命令消 息,窗口类、视图派生类、文档类CDocument和应用程序 类CWinApp及它们的派生类都能处理命令消息。 WM_COMMAND消息中,其参数wParam的低16位为命令 的ID号,高16位为0;lParam值为0。

  6. 6.1.1 Windows程序中的消息分类 3、控件通知消息 控件是一个小的子窗口,一般它是其他窗口的一个组成部分 ,它能够接收用户的操作并向父窗口发送消息。常见的控 件有按钮、列表框、文字编辑框等。 控件通知消息即指控件或其他子窗口向其父窗口发送命令 消息。常用的控件通知消息用前缀不同来区分,如BM_, CB_,DM_等。 控件通知消息中,其参数wParam的低16位为命令的ID号, 高16位为消息通知码;lParam值为控件窗口句柄。

  7. 低字节包含当前光标的X坐标值 高字节包含当前光标的Y坐标值 6.1.2 Windows中常用消息 1. WM_LBUTTONDOWN:产生单击鼠标左键的消息 1Param wParam包含一整数值以标识鼠标键的按下状态 MK_LBUTTON 按下鼠标左键 MK_MBUTTON 按下鼠标中键 MK_RBUTTON 按下鼠标右键 • 此外,相似的消息还有: • WM_LBUTTONUP:放开鼠标左键时产生; • WM_RBUTTONDOWN:单击鼠标右键时产生; • WM_RBUTTONUP:放开鼠标右键时产生; • WM_LBUTTONDBLCLK:双击鼠标左键时产生; • WM_RBUTTONDBLCLK:双击鼠标右键时产生。

  8. 6.1.2 Windows中常用消息 2. WM_KEYDOWN:按下一个非系统键时产生的消息 系统键是指实现系统操作的组合键,例如Alt与某个功能键的 组合以实现系统菜单操作等。 wParam:按下键的虚拟键码(如:F1的虚拟键码在Windows.h 中定义为VK_F1),用以标识按下或释放的键 1Param:记录了按键的重复次数、扫描码、转移代码、先前 键的状态等信息。 相似的消息还有WM_KEYUP, 在放开非系统键时产生 3. WM_ CHAR:按下一个非系统键时产生的消息 wParam 为按键的ASCII码 1Param 与WM_KEYDOWN的相同

  9. 6.1.2 Windows中常用消息 4. WM_CREATE:由CreateWindow函数发出的消息 wParam:未用 1Param:包含一个指向CREATESTRUCT数据结构的指针 5. WM_CLOSE:关闭窗口时产生的消息 wParam和1Param均未用。 6. WM_DESTROY:由DestroyWiodow函数发出的消息 wParam和1Param均未用。

  10. 6.1.2 Windows中常用消息 7. WM_QUIT:由PostQuitMessage函数发出的消息 退出应用程序时发出的消息 wParam:含退出代码,标识程序退出运行时的有关信息 1Param:未用 均产生 WM_PAINT 消息 用户区移动或显示 用户窗口改变大小 程序通过滚动条滚动窗口 下拉式菜单关闭并需要恢复被覆盖的部分 Windows清除对话框等对象,并需要恢复被覆盖的部分

  11. 6.1.3 消息处理函数 MFC中,每一个消息都对对应一个专门的函数来处理,该 函数是相应类的成员函数,称为消息处理函数。 CWnd及其派生类都提供了许多默认的消息处理函数,但 控件通知消息和命令消息基本上没有默认处理函数,因此 编制消息处理函数是程序员的一个重要的工作。 一般情况下,程序员在编制消息处理函数时,应从应用程 序本身的功能和消息的特定出发,与其它消息处理函数相 配合,共同完成一项完整的功能。

  12. 第六章 消息处理 本 章 内 容 1、Windows程序中的消息 2、消息映射 3、使用Class Wizard管理消息和命令 4、程序实例

  13. 6.2 消息映射 6.2.1 消息映射和消息映射表 6.2.2 消息映射项和消息处理方法 6.1.3 SendMessage和PostMessage

  14. 6.2.1 消息映射和消息映射表 MFC中消息映射是把消息映射到成员函数中。消息映射使应 用程序在消息处理方面有了很大的改善。传统的API函数写成 的Win32应用程序中,消息是用巨大的“Switch”语句来处理的。 “Switch”中的每个“Case”语句处理一条不同的消息。而大多数 应用程序至少处理数十条消息,这样的处理方法就很繁重。 在设计C++对Win32API的封装时,微软认为需要改进消息的 处理方法,这样产生了消息映射。消息映射用与消息相关的 成员函数,将消息处理移入面向对象编程的世界内,当消息 被发送到应用程序时,由消息映射决定调用哪一个成员函数 来处理此消息。这些成员函数常被称为消息处理函数。

  15. 6.2.1 消息映射和消息映射表 MFC中应用程序中,用CWinApp类中的Run()函数从消息队 列中获取消息并送给适当的窗口进行处理。 消息映射指MFC类中将消息与消息处理函数联系起来,形成 一一对应的机制。消息映射表是反映这种对应关系的静态对 照表。任何一个从类CCmdTarget派生的类均可处理消息,都 有自己的消息映射。 声 明 消息映射 实 现

  16. 6.2.1 消息映射和消息映射表 1、声明消息映射 class CMyClass:public CObject { ... ... DECLARE_MESSAGE_MAP() } //在类的声明中添加消息映射宏调用,一般在头文件中 2、实现消息映射 BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() //在对应的cpp文件中加上消息映射表

  17. 6.2.2 消息映射项和消息处理方法 在类的消息映射表中加入相应的 消息映射入口项; 在类定义中加入消息处理函数的 函数原型,即函数声明; 完成一个消息的处理 在类的实现中加入消息处理函数 的函数体。 消息映射入口项的基本语法:ON_MessageName(ID,ClassMethod) 消息处理函数函数原型:afx_msg void ClassMetheod();

  18. 6.2.3 SendMessage和PostMessage 在Windows程序设计中,有时需要直接向窗口发送消息。 两种传输消息的方法:发送消息或寄送消息。 1、发送消息 发送消息时就是直接调用窗口函数,其通信是即时的,直到窗口 函数运行完成并返回一个结果后,应用程序才继续执行。 LRESULT Res=pWnd->SendMessage(Msg,wParam,lParam); LRESULT Res=::SendMessage(hWnd,Msg,wParam,lParam);

  19. 6.2.3 SendMessage和PostMessage 2、寄送消息 寄送消息是指把消息发送到拥有那个窗口的应用程序消息 队列中。当程序有空闲时将搜索消息队列,在消息队列中 处理消息,即从队列中删除它们,并将它们发送到指定窗 口。寄送消息时,通信可能延迟,直到目标应用程序获得 处理消息的时间。 鼠标和键盘消息通常是寄送的,而其它消息通常是发送的。 LRESULT Res=::PostMessage(hWnd,Msg,wParam,lParam);

  20. 第六章 消息处理 本 章 内 容 1、Windows程序中的消息 2、消息映射 3、使用Class Wizard管理消息和命令 4、程序实例

More Related