首页 > 代码库 > 初识MFC----文档类CDocument

初识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,该资源字符串是由“\0”分隔的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  --这也是存储在注册表中的文件类型名称,会显示于程序中用以访问注册表的对话框内

 

初识MFC----文档类CDocument