zoukankan      html  css  js  c++  java
  • MFC的记忆--图片版本

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

    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 对象收到某个讯息,便可由表格得知其处理函式的名称。

    clip_image002

    clip_image004

    clip_image006

    clip_image008clip_image010

    clip_image012

    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理清楚就是啦

  • 相关阅读:
    PTA乙级 (*1034 有理数四则运算 (20分)(string.append()))
    Nginx反向代理部署Node.js应用配置方法
    js处理字符串的用法小结
    从零开始基于webpack搭建react全家桶
    Linux常用指令
    matplotlib作图时中文字体乱码解决办法
    大话数据结构 串
    大话数据结构 队列
    大话数据结构 栈
    大话数据结构 线性表
  • 原文地址:https://www.cnblogs.com/titer1/p/2971968.html
Copyright © 2011-2022 走看看