消息处理机制:CCmdTarget 和 消息映射表
来源:互联网 发布:淘宝搜索屏蔽关键词 编辑:程序博客网 时间:2024/04/30 14:51
MFC的消息处理机制由两部分组成:CCmdTarget类和消息映射表。
- 窗口消息构成
所有的窗口消息由3部分组成
UINT Msg,
WPARAM wParam,
LPARAM lParam
- 为神马不用虚函数来处理消息?
因为,虚函数是使用类的虚函数表实现的,每个派生类都会带一个虚函数表的拷贝。虚函数表中的每个入口都是一个4字节指针,这样每个类对象就会在虚函数表中带来大量的额外字节。同时,窗口消息的个数和种类随时会发生变化,在消息改变时,使用虚函数实现的消息机制容易导致代码的废弃
- 消息机制内幕
MFC的消息映射技术由两部分组成:CCmdTarget类 和 消息映射表。CCmdTarget是所有接受窗口消息和命令对象的基类,为了接受消息,类必须从CCmdTarget派生。消息映射表是将窗口消息与处理消息的类成员函数关联起来的机制。消息映射表数据结构和消息映射宏是消息映射系统的另外的两个重要的方面。
(a) 两个消息映射表数据结构
AFX_MSGMAP_ENTRY 消息映射项 ( 见afxwin.h )
AFX_MSGMAP 消息映射表 ( 见afxwin.h )
(b) 消息映射宏
MFC提供了三个宏来产生消息映射表:DECLARE_MESSAGE_MAP、BEGIN_MESSAGE_MAP、END_MESSAGE_MAP。要在类中使用消息映射表,最基本的办法是在类声明中包含DECLARE_MESSAGE_MAP (.h文件),在类实现体中包含BEGIN_MESSAGE_MAP、END_MESSAGE_MAP和消息映射信息(.cpp文件)
DECLARE_MESSAGE_MAP ( 见afxwin.h )
定义了两个Protect函数,GetThisMessageMap用于返回本类中的消息映射表指针,GetMesssageMap是个虚函数
BEGIN_MESSAGE_MAP ( 见afxwin.h )
GetMessageMap 和 GetThisMessageMap函数的实现,在GetThisMessageMap中一个函数中定义了两个函数静态变量:_messageEntries 表示所有的消息映射项、messageMap表示消息映射表(见下)
END_MESSAGE_MAP ( 见afxwin.h )
BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP之间的内容是一系列消息映射表的入口宏。这些宏扩展后可以填充类的消息映射表_messageEntries。MFC定义的各种消息映射表入口宏,见下表
(3)MFC定义各种消息映射表入口宏
消息类型
宏形式
参数
预定义窗口消息
ON_WM_XXXX
None
命令
ON_COMMAND
Command Id, Handler Name
命令ID的范围
ON_COMMAND_RANGE
Start ID, End ID,
Handler Name
更新命令
ON_UPDATE_COMMAND_UI
Commnad Id, Handler Name
用于更新的命令ID的范围
ON_UPDATE_COMMAND_UI_RANGE
Start ID, End ID,
Handler Name
控件通知
ON_XXXX
Control Id, Handler Name
控件ID范围
ON_CONTROL_RANGE
Notify Code、Start ID、End ID、Handler Name
用户定义的消息
ON_MESSAGE
User-defined Message ID,
Handler Name
注册的窗口消息
ON_REGISTERED_MESSAGE
Registered message ID variable, Handler Name
- 消息处理机制:CCmdTarget 和 消息映射表
- 消息处理机制:CCmdTarget 和 消息映射表
- 消息处理机制:CCmdTarget 和 消息映射表
- VC----消息处理机制:CCmdTarget 和 消息映射表
- MFC的消息处理机制由两部分组成:CCmdTarget类和消息映射表。
- 关于CCmdTarget及消息映射
- MFC消息映射和处理机制整理
- 消息映射机制和自定义消息
- CWnd可以处理什么消息什么消息,CCmdTarget可以处理什么什么消息
- MFC消息机制---消息映射
- 消息机制和UI处理
- 消息映射与消息处理
- C++虚函数和消息映射机制
- 第一章 2. CPaintDC 和 消息映射机制
- 4MFC消息映射机制和CDC
- MFC消息映射机制
- MFC消息映射机制
- 消息映射机制
- [转] 2011年开春大戏──CES看点啥?
- 建一个更安全、更让人放心的网际网络(一)
- Technical Notes 17 : Destroying Window Objects(销毁窗口对象)
- 素材网址
- 素材网址
- 消息处理机制:CCmdTarget 和 消息映射表
- 坐公司班车想到的GIS玩法
- 坐公司班车想到的GIS玩法
- 40个迹象表明你还是PHP菜鸟
- 沉重的不止是心情,还有那空气。
- 动态语言会淘汰静态语言吗?
- 有哪位高手帮忙解决一下问题!!!DataContract 的using引用指令用什么?
- MTK的一些笔记
- 一款矩阵求解器