为啥要
了解MFC的架构体系?
1.如果没有一个系统性的东西,会觉得学的知识点很杂,没有一个东西把他贯穿起来,越到后面会觉得困难,总有一天会遇到你解决不了的问题,知识点其实不难,难的是架构这些东西(需要你有极其丰富的工作经验才能理解)
CWinApp:
1.MFC应用程序的抽象,管理Document Template(链表结构),统筹全局
2.其重要性就相当于OS,正是因为太重要了,在开发过程中你很少去用到它
3.当某些需求需要联动CFrameWnd,CView,CDocument,就要考虑用消息机制,还是去放在CWinApp。
CFrameWnd:框架窗口,负责创建应用主窗口,含标题栏,菜单栏,工具栏,状态栏等(可以有多个)
CView:负责展示应用数据,View其实是一个没有边框的窗口(控件属于CView吗?)
CDocument:负责存储应用数据(可以有多个)

RUNTIME_CLASS:创建的过程和消息发送的过程就分离了,从而实现了解耦;上一层就可以把它们进行一个抽象,
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;
}



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

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

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