Visual C++.NET編程講座之三(3) |
文檔數(shù)據(jù)的讀操作 對(duì)于上述過(guò)程,我們所做的僅僅是在文檔類的Serialize函數(shù)中添加文檔數(shù)據(jù)讀取(加載)和存儲(chǔ)的代碼。需要說(shuō)明的是,Serialize函數(shù)的參數(shù)ar是一個(gè)CArchive類的引用對(duì)象。CArchive類提供了"<<"和">>"運(yùn)算符,分別可以向文檔對(duì)象寫入數(shù)據(jù)或從文檔對(duì)象中讀取數(shù)據(jù)。它們的含義與C++中的"<<"和">>"運(yùn)算符相同,只不過(guò)CArchive支持更多的數(shù)據(jù)類型,如:CObject、CString等。除此之外CArchive類還提供ReadString和WriteString成員函數(shù)來(lái)讀寫文檔中的一行文本。下面的過(guò)程用來(lái)將文檔的文本內(nèi)容讀出并保存到一個(gè)字符串集合類對(duì)象中。 (1) 將解決方案管理器窗口切換到"類視圖",展開(kāi)所有的類,右擊類名"CTextViewerDoc",從彈出的快捷菜單中選擇"添加"->"添加變量",彈出"添加成員變量向?qū)?對(duì)話框,在"變量類型"框中輸入CStringArray,在"變量名"框中輸入m_strContent,如圖4所示。單擊"完成"按鈕。 CStringArray是"字符串集合類",它封裝了CString數(shù)組對(duì)象的全部操作。類似的還有對(duì)BYTE、UINT、WORD和DWORD等類型的數(shù)組操作的集合類CByteArray、CUIntArray、CWordArray和CDWordArray。這些集合類都有相似的操作,如Add(添加)、RemoveAll(刪除全部元素)、GetAt(獲取指定數(shù)組下標(biāo)的元素)等。 圖4 添加成員變量 (2) 在CTextViewerDoc::Serialize函數(shù)中添加讀取文檔文本內(nèi)容代碼,如圖5所示。 代碼中,ReadString是讀取打開(kāi)的文檔的一行文本,當(dāng)成功讀出時(shí),函數(shù)返回TRUE,當(dāng)文本達(dá)到文檔結(jié)尾時(shí),函數(shù)返回FALSE。這樣,通過(guò)while循環(huán)可以將文檔的文本內(nèi)容全部讀取并保存到m_strContent中。 (3) 由于另一個(gè)文檔打開(kāi)時(shí),需要將m_strContent中的內(nèi)容清除,所以我們需要跟蹤DeleteContents函數(shù)。在CTextViewerDoc類的屬性窗口,單擊"重寫"按鈕,在列表框中找到DeleteContents函數(shù)項(xiàng),單擊右邊的空格后再單擊右側(cè)的下拉按鈕,出現(xiàn)一個(gè)下拉列表,如圖6所示。 (4) 單擊"<添加>DeleteContents",該函數(shù)的重寫就添加好了。這樣,框架在自動(dòng)執(zhí)行該函數(shù)時(shí)就會(huì)將自己添加在這個(gè)函數(shù)中的代碼也會(huì)被執(zhí)行。 (5) 在DeleteContents中添加如圖7所示的加框代碼。 這就是文檔文本內(nèi)容的整個(gè)讀取過(guò)程。需要說(shuō)明的是,也可以將"m_strContent.RemoveAll();"語(yǔ)句直接添加在圖5中的while循環(huán)語(yǔ)句之前,從而可以省略(5)和(6)的步驟。 |
聯(lián)系客服