博客
关于我
MFC浅析(3) 文档视图结构中命令的处理流程
阅读量:134 次
发布时间:2019-02-27

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

在MDI文档视图结构中,命令的发送和处理流向是应用程序的关键部分。以下是命令流向的详细说明:

  • 命令的基本概念

    当用户在界面上点击菜单、工具栏或使用快捷键时,系统会向程序发送命令。这些命令以WM_COMMAND消息的形式传递,参数包括通知代码、命令ID和来源窗口。命令ID是识别具体命令的核心部分,其范围从0x8000到0xDFFF,用于区分用户定义命令、AFX命令以及标准窗口命令等。

  • 命令流向的机制

    在MDI框架中,命令的流向是从窗口层级逐步向下传递的。具体流程如下:

    • 主框架窗口(CMDIFrameWnd):作为顶级窗口,负责接收并处理命令。若有子框架窗口(CMDIChildWnd),则将命令传递给子框架处理。
    • 子框架窗口(CMDIChildWnd):在激活的视图对象(CView)处处理命令。CView会尝试处理命令,如果未找到对应的处理函数,则将命令传递给文档对象(CDocument)。
    • 文档对象(CDocument):CDocument会尝试根据命令ID查找对应的处理函数。如果未找到,则交由文档模板(CDocTemplate)处理。
    • 文档模板(CDocTemplate):如果文档模板也未处理该命令,则命令会返回到子框架窗口。子框架窗口会再次尝试处理,若仍未找到对应的处理函数,则将命令传递给应用程序对象(CWinApp)。
    • 应用程序对象(CWinApp):作为最终的命令处理者,CWinApp会根据命令ID调用相应的处理函数。
  • 命令流向的具体实现

    • 无文件打开情况
      • 主框架窗口(CMDIFrameWnd)首先尝试处理命令。如果有子框架窗口存在,则交给子框架处理。如果没有子框架,则直接交给应用程序对象处理。
    • 有文件打开情况
      • 命令首先发送到子框架窗口(CMDIChildWnd),由子框架处理后传递给对应的视图对象(CView)。CView会尝试处理命令,若未找到对应的处理函数,则将命令传递给文档对象(CDocument)。CDocument同样会尝试处理命令,若未找到,则交给文档模板处理。如果文档模板也未处理,则命令会返回到子框架窗口,再次尝试处理。若仍未找到对应的处理函数,则命令会最终传递给应用程序对象处理。
  • 转载地址:http://jvid.baihongyu.com/

    你可能感兴趣的文章
    pandas 根据不是常量的第三列的值将值从一列复制到另一列
    查看>>
    pandas 根据值从多列中的一列查找
    查看>>
    Pandas 根据布尔条件选择行和列
    查看>>
    pandas 版本兼容特定的蟒蛇和NumPy配置吗?
    查看>>
    pandas 生成excel多级表头
    查看>>
    pandas 读取excel数据,以字典形式输出
    查看>>
    Pandas 读取具有浮点值的 csv 文件会导致奇怪的舍入和小数位数
    查看>>
    pandas 适用,但仅适用于满足条件的行
    查看>>
    pandas 重新采样到每月的特定工作日
    查看>>
    pandas :按移位分组和累加和(GroupBy Shift And Cumulative Sum)
    查看>>
    pandas :检测一个DF和另一个DF之间缺失的列
    查看>>
    Pandas-从具有嵌套列表列表的现有列创建动态列时出错
    查看>>
    Pandas-通过对列和索引的值求和来合并两个数据框
    查看>>
    pandas.read_csv()的详解-ChatGPT4o作答
    查看>>
    PANDAS.READ_EXCEL()输出‘;溢出错误:日期值超出范围‘;而不存在日期列
    查看>>
    Pandas:对给定列求和 DataFrame 行
    查看>>
    Pandas、Matplotlib、Pyecharts数据分析实践
    查看>>
    Pandas中文官档~基础用法2
    查看>>
    Pandas中文官档~基础用法6
    查看>>
    pandas交换两列
    查看>>