2. 使用編輯控件
"編輯控件"是一個(gè)可以讓用戶從鍵盤輸入和編輯文本的控件,通過它可以輸入各種文本、數(shù)字或者口令,也可使用它來編輯和修改簡單的文本內(nèi)容。MFC類CEdit封裝了編輯控件的全部操作。
使用編輯控件實(shí)現(xiàn)文檔數(shù)據(jù)的顯示的思路是,先在視圖中創(chuàng)建一個(gè)與視圖客戶區(qū)大小相同的編輯控件,然后把文檔的文本內(nèi)容轉(zhuǎn)送到編輯控件中。這里的視圖客戶區(qū)是指除了窗口標(biāo)題欄、菜單欄、工具欄、狀態(tài)欄以及邊框之外的部分。簡單地說,就是默認(rèn)的背景色為白色的區(qū)域。
實(shí)現(xiàn)的步驟如下:
(1) 為CTextViewerView類添加成員變量CEdit* m_ctrlEdit。這是一個(gè)指針變量,用"添加成員變量向?qū)?添加時(shí),要在"變量類型"框加輸入"CEdit*"(雙引號不輸入,注意其中的星號),而在"變量名"中輸入m_ctrlEdit。
(2) 為CTextViewerView類添加OnInitialUpdate函數(shù)的重寫,并添加如圖10所示的代碼(加框部分)。
圖10 在OnInitialUpdate中添加的代碼
new和delete分別用來為類對象分配和釋放內(nèi)存空間。為了避免m_ctrlEdit內(nèi)存空間重復(fù)分配,我們在new操作前,要先將m_ctrlEdit內(nèi)存空間釋放。
當(dāng)框架將文檔與視圖關(guān)聯(lián),且視圖將要顯示時(shí)調(diào)用OnInitialUpdate函數(shù),因此我們將視圖的一些初始化代碼添加到這里。
(3) 在CTextViewerView析構(gòu)函數(shù)中添加m_ctrlEdit內(nèi)存空間釋放的語句: if ( m_ctrlEdit ) delete m_ctrlEdit;
(4) 由于視圖大小改變后,編輯控件的大小也應(yīng)隨之改變,因此我們需要跟蹤窗口的WM_SIZE消息,只要窗口大小發(fā)生改變后,都會(huì)發(fā)送這個(gè)消息。單擊CTextViewerView類屬性窗口中的"消息"按鈕,添加WM_SIZE消息映射。如圖11所示。
圖11 添加WM_SIZE的消息映射
(5) 在消息映射函數(shù)CTextViewerView::OnSize中添加如圖12所示的代碼。
圖12 在OnSize中添加的代碼
(6) 運(yùn)行程序,打開當(dāng)前文件夾下的ReadMe.txt文件,結(jié)果如圖13所示。
圖13 使用編輯控件的文檔數(shù)據(jù)顯示結(jié)果
評述:這種方法雖然也比較簡單,且具有文本的編輯功能,但文本顯示的格式還很單調(diào),例如它的行間距和字間距無法調(diào)整,更主要的是視圖的繪制功能無法起作用。