1. 程式人生 > >初識MFC----文檔類CDocument

初識MFC----文檔類CDocument

文件對話框 問題 document 資源 獲取 docstring key ive classes

一、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