关键类
,MFC中关键类有:
CMFCAPP:最底层的类,也是最重要的类,统筹全局,管理DOCUMENT TEMPLATE
CFRAMEWND:框架窗口,包括菜单栏、工具栏、状态栏等等,主要是负责窗口的布局
CVIEW:负责展示具体的数据
CDOCUMENT:负责提供具体的数据
我们可以从CMFCAPP中直接看到他的三个类
点击 类视图 ==CMFCpaintApp===转到InitInstance定义
注意一下,这里三个类前面都有RUNTIME_CLASS,这是什么意思呢 ,我们查看其指针的定义,发现它的本质为struct CRuntimeClass,它里面有个成员函数,CObject* CreateObject();,这个函数的作用是一个虚函数,通过子类重构,来接收不同的消息,用以生成不同的窗口,即多态,另外
CRuntimeClass里还有一些成员变量及方法,可以获取RUNTIME_CLASSS的类的名字、和一些信息
它们的关系
1.查看CMFCAPP,发现它父类的父类的父类CWinThread,有一个成员变量,CDocManager* m_pDocManager,查看CDocManager定义,它里面又有一个CPtrList m_templateList链表,包含了所有的文档,它的用处是维护所有的DOCUMENTTEMPLATE,CMFCAPP会把所有的DOCUMENTTEMPLATE加入到链表中
什么是DOCUMENTTEMPLATE,即VIEW、DOC、FRAME
2.查看CMFCpaintDoc,直接查看它的父类CDocument,它里面有两个重要的成员变量,CDocTemplate* m_pDocTemplate;和CPtrList m_viewList,这两个类 ,一个类回指OCUMENTTEMPLATE,一个指向视图列表,文档和视图是多对多的关系
3.查看CFRAMEWND,查看父类CFrameWndEx,再查看父类CFrameWnd,它里面有
CView* m_pViewActive,这个指针指向当前活动的view,称为“当前视图指针”
4.查看CVIEW,它的父类CView里面有个成员函数,CDocument* m_pDocument;,它指向相关的document
启动流程
这里还有很多问题
1.当我想跟踪调试的时候,无法打开appmodul.cpp文件
https://ask.csdn.net/questions/7956074?spm=1001.2014.3001.5501
2.关于图2的一些问题
消息分类
标准消息:除WM_COMMAND消息以外,所有以WM开头的消息
命令消息:WM_COMMAND消息,来自菜单、工具栏 的消息
通告消息:由控件产生的消息,例如:按钮的单击,列表框的选择,通告消息会发给框架,框架又会发送命令消息给相应的控件,比如单击保存按钮,会发送通告给框架,框架又会发送保存命令给相应的控件
另外,凡是从CWND派生的类,都可以接收以上三类消息,而从CCMDTARGET派生的类,只能接收命令和通告消息,CCMDTARGET就是CWND的父类