顾乔芝士网

持续更新的前后端开发技术栈

MFC单文档视图架构(mfc单文档教程)

其实所有的节日,都不是为了礼物和红包而生,而是提醒我们不要忘记爱与被爱,生活需要仪式感,而你需要的是在乎和关爱。。。

---- 网易云热评

一、特点

只能管理一个文档


二、相关类

CWinApp / CFrameWnd / CView / CDocument - 文档类

CDocManager - 文档管理类

CDocTemplate - 文档模板类

CSingleDocTemplate - 单文档模板类


三、实例

1、添加三大框架,动态创建

class CMyDoc :public CDocument {
       DECLARE_DYNCREATE(CMyDoc)
};
IMPLEMENT_DYNCREATE(CMyDoc,CDocument)
class CMyView :public CEditView {
       DECLARE_DYNCREATE(CMyView)
};
IMPLEMENT_DYNCREATE(CMyView, CEditView)
class CMyFrameWnd :public CFrameWnd{
       DECLARE_DYNCREATE(CMyFrameWnd)
};
IMPLEMENT_DYNCREATE(CMyFrameWnd,CFrameWnd)

2、添加应用框架,手动创建

class CMyWinApp:public CWinApp {
public:
       virtual BOOL InitInstance();
};
CMyWinApp theApp;
BOOL CMyWinApp::InitInstance() {
       //单文档模板类对象
       CSingleDocTemplate* pTemplate = new CSingleDocTemplate(IDR_MENU1,  RUNTIME_CLASS(CMyDoc), RUNTIME_CLASS(CMyFrameWnd), RUNTIME_CLASS(CMyView));
       AddDocTemplate(pTemplate);
       OnFileNew();
       m_pMainWnd->ShowWindow(SW_SHOW);
       m_pMainWnd->UpdateWindow();
       return TRUE;
}

3、运行报错,需要添加字符串表

4、添加字符串表,右击资源,添加string table

5、运行结果:

6、关系图

theApp

|->m_pDocManager //文档管理类对象地址

|->m_templateList

|->CSingleDocTemplate* pTemplate

|->m_pOnlyDoc //文档类对象地址

|->m_pDocClass

//文档类的静态变量的地址RUNTIME_CLASS(CMyDoc)

|->m_pFrameClass

//框架类的静态变量的地址RUNTIME_CLASS(CMyFrameWnd)

|->m_pViewClass

//视图类的静态变量的地址RUNTIME_CLASS(CMyView)


7、OnFileNew函数的执行过程

通过theApp获取文档管理类对象地址(m_pDocManager)


通过文档管理类对象地址(m_pDocManager)获取一个链表成员(m_templateList)并从链表中获取单文档模板类对象(pTemplate)


利用单文档模板类对象(pTemplate)获取文档类的静态变量地址,并调用对象加工厂函数,动态创建文档类对象,并返回对象地址。


利用单文档模板类对象(pTemplate)获取框架类的静态变量地址,并调用对象加工厂函数,动态创建子框架类对象,并返回对象地址。


利用框架类对象调用LoadFrame函数,创建主框架窗口.在处理框架窗口的WM_CREATE消息时,动态创建视图类对象并创建视图窗口。


在处理视图窗口的WM_CREATE消息时,将视图类对象和文档类对象建立绑定关系


欢迎关注公众号:顺便编点程

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言