初識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