作者: adding■出處: yesky
第二講 文檔數(shù)據(jù)的讀取和顯示
摘要
本講先來介紹程序各個(gè)類的關(guān)聯(lián)機(jī)制,然后討論文檔的讀過程及讀操作,最后討論文檔數(shù)據(jù)的顯示方法和技巧。
程序中各用戶類的關(guān)聯(lián)
在上一講中,我們使用MFC應(yīng)用程序向?qū)?chuàng)建一個(gè)單文檔項(xiàng)目TextViewer。現(xiàn)在,我們打開該項(xiàng)目??梢钥闯?,向?qū)門extViewer項(xiàng)目創(chuàng)建了以下幾個(gè)類:
應(yīng)用程序類CTextViewerApp,應(yīng)用程序必須的運(yùn)行入口,在上一講已經(jīng)討論過。
主框架窗口類CMainFrame,用來負(fù)責(zé)窗口的標(biāo)題欄、菜單、工具欄及狀態(tài)欄等界面元素的操作。
文檔類CTextViewerDoc,用來負(fù)責(zé)文檔數(shù)據(jù)的讀取和保存
視圖類CTextViewerView類,用來顯示文檔顯示,并可響應(yīng)各種類型的輸入(例如鍵盤輸入)以及實(shí)現(xiàn)打印和打印預(yù)覽等。
還有一個(gè)對(duì)話框類CAboutDlg,用來顯示該應(yīng)用程序的版本信息,是一個(gè)"關(guān)于"對(duì)話框。
需要說明的是,Visual C++ .NET將各個(gè)類的聲明保存在頭文件中,即以.h為擴(kuò)展名,而將類的實(shí)現(xiàn)代碼保存在以.cpp為擴(kuò)展名的實(shí)現(xiàn)文件中。
那么,在MFC中上述的主框架窗口類、文檔類和視圖類的關(guān)系是怎樣呢?我們來看一下。
將解決方案管理器切換到"類視圖",展開CTextViewerApp類的所有節(jié)點(diǎn),雙擊"InitInstance( void )",打開該函數(shù)代碼。由于Visual C++ .NET的代碼注釋是中文的,因此我們這里僅給出如圖1所示的代碼。
圖1 InitInstance函數(shù)中的部分代碼
代碼中,CSingleDocTemplate是從CDocTemplate派生的單文檔類,它協(xié)調(diào)了文檔窗口、文檔和視圖的關(guān)系,并把三者聯(lián)系起來。該類的構(gòu)造函數(shù)需要指定四個(gè)參數(shù),分別為表示菜單和加速鍵等的資源ID號(hào)以及三個(gè)由宏RUNTIME_CLASS指定的CRuntimeClass結(jié)構(gòu)對(duì)象指針,它們分別是程序的文檔類、框架窗口類和視圖類的結(jié)構(gòu)指針。
CRuntimeClass結(jié)構(gòu)反映一個(gè)運(yùn)行時(shí)類的信息,通常用宏RUNTIME_CLASS來獲取一個(gè)類的CRuntimeClass結(jié)構(gòu)指針。Visual C++借助CRuntimeClass類結(jié)構(gòu)能在應(yīng)用程序運(yùn)行過程中獲得該類對(duì)象及其基類的相關(guān)信息,從而可以實(shí)現(xiàn)運(yùn)行時(shí)類型檢查(Run Time Type Inspection,RTTI)。
AddDocTemplate用來將指定的單文檔模板或多文檔模板指針添加到程序所包含內(nèi)部的文檔模板指針列表中。