博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC的记忆--图片版本
阅读量:4485 次
发布时间:2019-06-08

本文共 1965 字,大约阅读时间需要 6 分钟。

这是以前看侯捷书的读书笔记,把最重要的章节给截取的,方便以后回忆

MFC 把訊息分為㆔大類:

命令讯息(WM_COMMAND):命令讯息意味着「用户命令程序做某些动作」。

凡由 UI 对象产生的讯息都是这种命令讯息,可能来自选单或加速键或工具栏

深入 MFC 程序设计

按钮,并且都以 WM_COMMAND 呈现。如何分辨来自各处的命令讯息?SDK

程序主要靠讯息的 wParam 辨识之,MFC 程序则主要靠选单项目的标识符

menu ID)辨识之 -- 两者其实是相同的。

什么样的类别有资格接受命令讯息?凡衍生自CCmdTarget 之类别,皆有资格。从

command target 的字面意义可知,这是命令讯息的目的。也就是说,凡衍生自

CCmdTarget 者,它的骨子里就有了种特殊的机制。把整张 MFC 类别阶层图摊开

来看,几乎建构应用程序的最重要的几个类别都衍生自 CCmdTarget,剩的不能接

收讯息的,是像 CFileCArchiveCPointCDao(数据库)、Collection Classes(纯

粹数据处理)、GDI 等等「非主流」类别。

 

标准讯息 - WM_COMMAND 之外,任何以WM_ 开头的都算是这类。任何

衍生自CWnd 之类别,均可接收此讯息。

66:小结前者与窗口不直接相关,后者直接相关。前者区分考id,后者区分直接依靠宏。

66:wm_ create close destroy (想起后添加的窗口,终止方法by zcq), 左右键(单击否),滑鼠。

 

Control Notification - 这种讯息由控制组件产生,为的是向其父窗口(通常是对

话盒)通知某种情况。例如当你在 ListBox 选择其㆗㆒个项目,ListBox

会产生 LBN_SELCHANGE 传送给父窗口。这类讯息也是以 WM_COMMAND 形式呈现

 

万流归宗 Command TargetCCmdTarget

你可以在程序的许多类别之设计拦路虎(我是指「讯息映像表格」),接收并处理讯

息。只要是 CWnd 衍生类别,就可以拦任何 Windows 讯息。与窗口无关的MFC

别(例如 CDocument CWinApp)如果也想处理讯息,必须衍生自 CCmdTarget,并

且只可能收到 WM_COMMAND 命令讯息。

会产生命令讯息的,不外就是 UI 对象:选单项目和工具栏按钮都是。命令讯息必须有

个对应的处理函式,把讯息和其处理函式「绑」在块儿,这动作称为 Command

Binding,这个动作将由堆宏完成。通常我们不直接手工完成这些宏内容,也就是

说我们并不以文本编辑器撰写相关的码,而是藉助于ClassWizard

Command Target 对象如何知道它可以处理某个讯息?答案是它会看看自己的讯息映

射表。讯息映像表使得讯息和函式的对映关系形成份表格,进而全体形成张网,当

Command Target 对象收到某个讯息,便可由表格得知其处理函式的名称。

 

 

 

 

 

1. MDI 主窗口( CMDIFrameWnd 收到命令讯息WM_COMMAND ID

ID_EDIT_CLEAR_ALL

2. MDI 主窗口把命令讯息交给目前作用 MDI 子窗口(CMDIChildWnd)。

3. MDI 子窗口给它自己的子窗口(也就是 View个机会。

4. View 检查自己的 Message Map

5. View 发现没有任何处理程序可以处理此命令讯息,只好把它传给 Document

6. Document 检查自己的 Message Map,它发现了个吻合项:

BEGIN_MESSAGE_MAP(CScribbleDoc, CDocument)

ON_COMMAND(ID_EDIT_CLEAR_ALL, OnEditClearAll)

...

END_MESSAGE_MAP()

于是呼叫该函式,命令讯息的流动路线也告终止。

如果述的步骤6 仍没有找到处理函式,那么就:

7. Document 把这个命令讯息再送到 Document Template 对象去。

8. 还是没被处理,于是命令讯息回到 View

9. View 没有处理,于是又回给 MDI 子窗口本身。

10. 传给 CWinApp 对象 -- 无主讯息的终极归属。

 

 

小结:截图,没有粘贴最难的hook mfc 消息的产生关系,当前就把 9-5理清楚就是啦

转载于:https://www.cnblogs.com/titer1/archive/2013/03/20/2971968.html

你可能感兴趣的文章
css定位
查看>>
MySql数据库的访问
查看>>
JSP—cookie
查看>>
构建之法第六、七章读后感
查看>>
css布局1
查看>>
百度实习第二天
查看>>
直接拿来用!最火的Android开源项目整理
查看>>
[单选题]计算字符串长度的函数是:
查看>>
[LeetCode-131] Palindrome Partitioning
查看>>
HTTP协议的理解
查看>>
Pika的设计及实现
查看>>
C++ primer plus chapter 8
查看>>
闭包匿名委托 注意点
查看>>
GreenDao数据库的升级
查看>>
iOS 简化冗余代码
查看>>
mysqldump导出--数据+结构+(函数+存储过程)
查看>>
js_DOM属性
查看>>
(转)NPOI+SharpZipLib实现压缩多个Excel下载
查看>>
第9月第26天 pairs和ipairs cocos2dx 动画
查看>>
LeetCode Majority Element I
查看>>