zoukankan      html  css  js  c++  java
  • mfc创建文档视图过程

    一、如何创建文档视图界面:

    创建新的文档视图界面,只需要调用CDocTemplate::OpenDocumentFile(strpath)即可。(strpath为要打开的文档路径,如果是NULL,则生成新的文档)。

    二、上面这个函数为何能够生成文档视图对象?

    因为

    1.它调用了CDocTemplate::CreateNewDocument()函数生成了CDocument对象;

    2.它调用了CDocTemplate::CreateNewFrame()函数生成了CFrameWnd对象;

    3.在生成文档框架的过程中又创建了CView对象。(因为文档框架是文档视图的父窗口,它们之间存在包含与被包含关系)

    最终它生成了界面。

    三、为何我在打开多文档软件时,系统自动给我生成了一个空白文档?如何不让它自动生成,我自己生成?

    系统在开启时会默认调用CWinAPP:OnFileNew()这个响应函数(且这个函数是个虚函数),这个事件响应函数默认会调用CDocTemplate::OpenDocumentFile(strpath)函数生成一个空白文档。如果要取消默认,重载这个OnFileNew()函数,并且什么也不做即可。

    如果你要自己生成,你得获取CWinApp内保存的文档模板对象,然后调用它的OpenDocumentFile(strpath)即可。

    四、如何获取文档模板对象呢?

    文档模板对象列表保存在CWinApp里的一个CDocManage的一个成员变量中。通过遍历这个成员遍历即可获取文档模板对象。

    遍历由CWinApp::GetFirstDocTemplatePosition()和CWinApp::GetNextDocTemplate()函数得到。

    五、CWinAPP和CDocTemplate都有OpenDocumentFile()函数,到底怎么回事?

    前者实质是调用后者实现文档视图界面的创建。

    CView、CDocument、CMDIChildFrame、CMDIDocTemplate、CDocManager、CWinApp之间的关系:

    CView:

    CDocument* GetDocument();//获取与视图相关的文档对象

    CFrameWnd* GetParentFrame();//获取视图的框架(文档框架)

    CDocument:

    CDocTemplate* GetDocTemplate()//获取文档的文档模板

    POSITION GetFirstViewPosition();

    CView* GetNextView(position);//遍历文档相关的视图

    参考文献:1.https://www.cnblogs.com/stevengerrard/p/3925422.html

    2.https://blog.csdn.net/zhanghefu/article/details/2546601

  • 相关阅读:
    mysql中事务隔离级别可重复读说明
    Zookeeper安装与启动
    PHP闭包之bind和bindTo
    使用WebPack打包
    用Python下载momentum中的精美壁纸
    supervisor使用
    Shell脚本:RedisKey批量删除
    使用Certbot配置站点的https
    PHPfmt代码格式化
    创建用私钥签名的证书
  • 原文地址:https://www.cnblogs.com/zhuluqing/p/8992627.html
Copyright © 2011-2022 走看看