轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2021-05-28 09:34:18.917|閱讀 667 次
概述:前面幾節(jié)講了菜單、工具欄和狀態(tài)欄的使用,本節(jié)開始將為大家講解文檔、視圖和框架的知識(shí)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
前面幾節(jié)講了菜單、工具欄和狀態(tài)欄的使用,本節(jié)開始將為大家講解文檔、視圖和框架的知識(shí)。開始前我們先了解一下mfc界面類庫Xtreme Toolkit Pro。
Xtreme Toolkit Pro:是屢獲殊榮的VC界面庫,是MFC開發(fā)中最全面界面控件套包,它提供了Windows開發(fā)所需要的11種主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。
點(diǎn)擊下載Xtreme Toolkit Pro最新試用版
文檔、視圖和框架簡介
在VS2019/MFC編程入門:菜單資源詳解創(chuàng)建的單文檔工程Example34中,我們可以看到MFC向?qū)ё詣?dòng)為我們生成了CExample34Doc類、CExample34View類和CMainFrame類,它們就分別是文檔類、視圖類和框架窗口類。
文檔/視圖結(jié)構(gòu)是MFC提供的一種不錯(cuò)的設(shè)計(jì),它將數(shù)據(jù)的處理和顯示分開來,這樣更便于我們對(duì)程序的維護(hù)和擴(kuò)展。下面分別介紹這種結(jié)構(gòu)中涉及到的幾個(gè)重要概念。
文檔
文檔對(duì)象用于管理和維護(hù)數(shù)據(jù),包括保存數(shù)據(jù)、取出數(shù)據(jù)以及修改數(shù)據(jù)等操作,在數(shù)據(jù)被修改以后,文檔可以通知其對(duì)應(yīng)的所有視圖更新顯示。
視圖
視圖對(duì)象將文檔中的數(shù)據(jù)可視化,負(fù)責(zé)從文檔對(duì)象中取出數(shù)據(jù)顯示給用戶,并接受用戶的輸入和編輯,將數(shù)據(jù)的改變反映給文檔對(duì)象。視圖充當(dāng)了文檔和用戶之間媒介的角色。
框架
一個(gè)文檔可能有多個(gè)視圖界面,這就需要有框架來管理了。框架就是用來管理文檔和視圖的。框架窗口是應(yīng)用程序的主窗口,應(yīng)用程序執(zhí)行時(shí)會(huì)先創(chuàng)建一個(gè)最頂層的框架窗口。視圖窗口是沒有菜單和邊界的子窗口,它必須包含在框架窗口中,即置于框架窗口的客戶區(qū)內(nèi)。
文檔模板
文檔模板中存放了與文檔、視圖和框架相關(guān)的信息。應(yīng)用程序通過文檔模板創(chuàng)建文檔對(duì)象、框架窗口對(duì)象和視圖對(duì)象。另外,文檔、視圖和框架之間的關(guān)系也是由文檔模板來管理的。
我們來看看Example34單文檔程序中,CExample34App應(yīng)用程序類的成員函數(shù)CExample34App::InitInstance()創(chuàng)建并注冊(cè)文檔模板的部分:
C++代碼
BOOL CExample34App::InitInstance() { ......略 // Register the application's document templates. Document templates // serve as the connection between documents, frame windows and views CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CExample34Doc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CExample34View)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate); ......略 return TRUE; }
在構(gòu)造文檔模板類CSingleDocTemplate的對(duì)象時(shí),第一個(gè)參數(shù)是資源ID IDR_MAINFRAME,它包括框架窗口圖標(biāo)等,后面的三個(gè)參數(shù)都是RUNTIME_CLASS宏的調(diào)用,RUNTIME_CLASS用于獲取類的運(yùn)行時(shí)信息,文檔模板可以根據(jù)這些動(dòng)態(tài)創(chuàng)建信息來創(chuàng)建相應(yīng)類的對(duì)象,即文檔對(duì)象、框架窗口對(duì)象和視圖對(duì)象。AddDocTemplate函數(shù)用來注冊(cè)文檔模板對(duì)象。
框架類、文檔類和視圖類
在VS2010自動(dòng)生成的代碼中,框架類繼承于CFrameWndEx類,文檔類繼承于CDocument類,視圖類繼承于CView類。
CFrameWndEx類又繼承于CFrameWnd類,CFrameWnd類中用于管理文檔和視圖的成員函數(shù)包括:
virtual CDocument* GetActiveDocument( );
獲得當(dāng)前活動(dòng)視圖對(duì)應(yīng)文檔對(duì)象的指針,如果不存在則返回NULL。
CView* GetActiveView( ) const;
獲得當(dāng)前活動(dòng)視圖對(duì)象的指針,如果不存在則返回NULL。
void SetActiveView(CView* pViewNew, BOOL bNotify = TRUE);
設(shè)置活動(dòng)視圖。參數(shù)pViewNew為要激活的視圖對(duì)象的指針,參數(shù)bNotify指定視圖是否接收激活通知。
CDocument類的主要成員函數(shù):
virtual BOOL OnNewDocument( );
創(chuàng)建新文檔。可以重載使用。
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
打開文檔。參數(shù)lpszPathName為要打開的文檔的路徑。可以重載使用。
virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
保存文檔。參數(shù)lpszPathName指定文檔保存到的全路徑。可以重載使用。
CDocTemplate* GetDocTemplate( ) const;
獲取此文檔類型對(duì)應(yīng)的文檔模板對(duì)象的指針。如果此文檔沒有被文檔模板管理則返回NULL。
virtual POSITION GetFirstViewPosition( ) const;
獲取文檔中視圖列表的第一個(gè)視圖的位置。
virtual CView* GetNextView(POSITION& rPosition) const;
利用此函數(shù)可以迭代處理文檔的所有視圖。參數(shù)rPosition為上一次調(diào)用GetFirstViewPosition或GetNextView成員函數(shù)返回的POSITION值的引用。
void AddView(CView* pView);
為文檔增加一個(gè)視圖。參數(shù)pView為要增加的視圖對(duì)象的指針。
void RemoveView(CView* pView);
移除某個(gè)視圖與文檔的關(guān)聯(lián)。參數(shù)pView為要移除的視圖對(duì)象的指針。
void UpdateAllViews(CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL);
在文檔被更改后調(diào)用此函數(shù)更新視圖。參數(shù)pSender指向修改文檔的視圖,實(shí)際應(yīng)用時(shí)常用來指定哪個(gè)視圖不需要更新,如果更新所有視圖則設(shè)為NULL,參數(shù)lHint包含了文檔修改的信息,參數(shù)pHint指向存儲(chǔ)文檔修改信息的對(duì)象。
CView類中與文檔/視圖結(jié)構(gòu)相關(guān)的成員函數(shù)包括:
CDocument* GetDocument( ) const;
獲取視圖關(guān)聯(lián)的文檔對(duì)象的指針。如果視圖沒有關(guān)聯(lián)到文檔上則返回NULL。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: