• 【MFC框架的执行过程分析】


    为啥要了解MFC架构体系?
    1.如果没有一个系统性的东西,会觉得学的知识点很杂,没有一个东西把他贯穿起来,越到后面会觉得困难,总有一天会遇到你解决不了的问题,知识点其实不难,难的是架构这些东西(需要你有极其丰富的工作经验才能理解)

    0x1 关键类

    CWinApp
    1.MFC应用程序的抽象,管理Document Template(链表结构),统筹全局
    2.其重要性就相当于OS,正是因为太重要了,在开发过程中你很少去用到它
    3.当某些需求需要联动CFrameWndCViewCDocument,就要考虑用消息机制,还是去放在CWinApp

    CFrameWnd:框架窗口,负责创建应用主窗口,含标题栏菜单栏工具栏状态栏等(可以有多个)

    CView:负责展示应用数据,View其实是一个没有边框的窗口(控件属于CView吗?)

    CDocument:负责存储应用数据(可以有多个)

    在这里插入图片描述
    RUNTIME_CLASS创建的过程消息发送的过程就分离了,从而实现了解耦;上一层就可以把它们进行一个抽象,

    0x2 从类的角度看MFC

    m_strPathName:回指其Document Template
    m_viewList:表示它可以同时维护一组Views

    class AFX_NOVTABLE CDocument : public CCmdTarget{
    	...
    protected:
    	CString m_strTitle;
    	CString m_strPathName; 
    	CDocTemplate* m_pDocTemplate;
    	CPtrList m_viewList;
    }
    

    m_pViewActive:指向当前活动的View

    class CFrameWnd : public CWnd{
    	...
    protected:
    	UINT m_nIDHelp;             // Help ID (0 for none, see HID_BASE_RESOURCE)
    	UINT m_nIDTracking;         // tracking command ID or string IDS
    	UINT m_nIDLastMessage;      // last displayed message string IDS
    	CView* m_pViewActive;       // current active view
    }
    

    m_pDocument:指向相关的Document。一次只能关联一个文档,如果有多个文档指向它,它会指向最后一个添加它的文档

    class AFX_NOVTABLE CView : public CWnd{
    	...
    protected:
    	CDocument* m_pDocument;
    	BOOL m_bInitialRedraw;
    }
    
    0x3 从图形(抽象化)的角度看MFC

    在这里插入图片描述

    0x4 从时序图的角度看MFC

    在这里插入图片描述
    在这里插入图片描述

    从消息分类的角度看MFC

    标准消息:除WM_COMMAND之外,所有以WM_开头的消息。从CWnd类派生的类都可以接收到这一消息

    在这里插入图片描述

    命令消息:来自菜单加速键工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。从CCmdTarget(CWnd的父类)派生的类都可以接收到这一类消息

    在这里插入图片描述

    通告消息:由控件产生的消息,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。从CCmdTarget(CWnd的父类)派生的类都可以接收到这一类消息

    用户自定义消息

  • 相关阅读:
    微前端:qiankun的两种运作模式
    Java与其他编程语言比较分析,编程语言选择与优点、缺点和适用场景详解
    【比较mybatis、lazy、sqltoy、lambda、操作数据 】操作批量新增、分页查询【一】
    k8s containerd集群配置安装完整踩坑教程
    Flowable 之任务分配
    C++的模板类在HotSpot VM中的应用
    Pylint检查规则中文版
    PHP接收并处理请求中携带的xml格式的信息
    设计模式—设计模式总览
    【ViT(Vision Transformer)】(二) 阅读笔记
  • 原文地址:https://blog.csdn.net/weixin_43468491/article/details/121565691