• 初识MFC----文档类CDocument


    一、MFC的文档

      1、相关问题

        文档类 - 负责管理数据,封装了和视图窗口以及框架窗口之间的操作

        CDocument - 父类CCmdTarget

      2、文档类的使用

        2.1首先利用pFrame调用LoadFrame函数,创建主框架窗口

        2.2在主框架窗口WM_CREATE消息处理中创建视图窗口

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

        //文档类用一个链表成员保存和文档类对象相关联的视图类对象

        m_viewList.AddTail(pView); 

        //视图类用一个普通成员保存和视图类对象相关联的文档类对象        

        pView->m_pDocument = this;

        经分析可知:

        文档类用一个链表保存视图类对象:说明一个文档类对象可以和多个视图类对象关联(绑定)

        视图类用一个普通成员保存文档类对象:说明一个视图类对象只能和一个文档类对象关联(绑定)

      3、对象的关系图

        theApp

           |---->m_pMainWnd

                  |---->m_pViewActive

                          |---->m_pDocument

                                 |---->m_viewList(保存视图类对象地址)

      4、文档类和视图类之间的操作

        4.1 CView::GetDocument() -可以获取和视图类相关联的文档类对象

        4.2 CView::OnUpdate -虚函数,刷新视图窗口

        4.3 CDocument::UpdateAllViews -可以触发所有和这个文档类对象相关联的视图类对象(视图窗口)刷新

      5、命令消息(WM_COMMAND)的处理顺序

        View->Document->Frame->App

     二、文档类中文件相关功能

      程序的文档类中有一个OnNewDocument虚函数,该函数是【文件新建】命令处理的一部分;

      1、修改单文档程序/多文档程序的程序窗口标题

        方法一:

          在程序的文档类中的虚函数OnNewDocument中添加:SetTitle("程序窗口的新标题");

        方法二:

          在程序的字串表资源中找到资源:IDR_MAINFRAME,该资源字符串是由“”分隔的7个子串;可利用文档模板类CDocTemplate的成员函数:GetDocString来获取各个子串:

          virtual BOOL GetDocString( CString& rString, enum DocStringIndex index ) const;

            rString:是一个CString对象的引用,当函数返回时,该参数将包含要查找的子串;

            index:枚举类型,指定将要查找的子串的索引,与IDR_MAINFRAME字符串资源中的7个子串的顺序一致,包括:

              CDocTemplate::windowTitle  --主窗口标题栏上的字符串,仅在单文档程序出现,多文档程序将以IDR_MAINFRAME字符串为默认值

              CDocTemplate::docName  --默认文档的名称,无指定时默认为“无标题”

              CDocTemplate::fileNewName  --文档类型的名称;如果程序指定支持多种类型的文档,此字符串将显示在“新建”文件对话框中

              CDocTemplate::filterName  --文档类型的描述和一个适用于此类型的通配符过滤器,这个字符串将出现在“打开”文件对话框中的文件类型列表框中,要和CDocTemplate::filterExt一起使用;

              CDocTemplate::filterExt  --文档的扩展名,如果没有指定就不能在“打开”文件对话框中处理这种文档,要和CDocTemplate::filterName一起使用

              CDocTemplate::regFileTypeId  --如果以::RegisterShellFileTypes向系统的注册表注册文件类型,此值会出现在HKEY_CLASSES_ROOT之下成为其子项,并仅供Windows内部使用;如果没有指定,这种文件类型就无法注册

              CDocTemplate::regFileTypeName  --这也是存储在注册表中的文件类型名称,会显示于程序中用以访问注册表的对话框内

  • 相关阅读:
    js发送请求
    GIS小知识
    oracle常见错误
    java异常Exception
    java获取文件路径
    Runnable和Thread的区别
    Hadoop shell命令
    Runtime和Process
    Linux下查看tomcat控制台输出信息
    ajax小知识
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6914121.html
Copyright © 2020-2023  润新知