原文件:
onfileopen
成員函式相關聯。
當使用者在通用「開啟」檔案對話方塊中指定乙個檔案後,應用程式將呼叫文件物件的cdocument::onopendocument虛成員函式。該函式將開啟檔案,並呼叫deletecontents清除文件物件的內容,然後建立乙個carchive(歸檔類)物件用於資料的讀取,接著又自動呼叫serialize函式。之後便呼叫檢視物件的cview::oninitialupdate虛成員函式。
上述的serialize函式是乙個很特別的函式,它既可以從中讀取文件資料,也可以儲存文件資料,稱為「序列化」函式。它被新增使用者的文件類中,用來根據carchive內部的乙個標誌來決定文件資料的流向(讀或寫),
文件資料的讀操作
對於上述過程,我們所做的僅僅是在文件類的
serialize
函式中新增文件資料讀取(載入
)和儲存的**。需要說明的是,
serialize
函式的引數
ar是乙個
carchive
類的引用物件。
carchive
類提供了「
<<
」和「>>
」運算子,分別可以向文件物件寫入資料或從文件物件中讀取資料。它們的含義與
c++中的「
<<
」和「>>
」運算子相同,只不過
carchive
cobject
、cstring
等。除此之外
carchive類還
提供readstring
和writestring
成員函式來讀寫文件中的一行文字。
文件資料的顯示方法和技巧
使用者的檢視類是負責顯示文件資料的,目前常用的顯示方法有二個:一是在檢視的客戶區中使用編輯控制項,二是直接呼叫cdc類的文字輸出函式繪製所有的文字內容。
1.使用編輯控制項
「編輯控制項」是乙個可以讓使用者從鍵盤輸入和編輯文字的控制項,通過它可以輸入各種文字、數字或者口令,也可使用它來編輯和修改簡單的文字內容。mfc類cedit封裝了編輯控制項的全部操作。
使用編輯控制項實現文件資料的顯示的思路是,先在檢視中建立乙個與檢視客戶區大小相同的編輯控制項,然後把文件的文字內容轉送到編輯控制項中。
2.直接控制文字的輸出(詳細)
(1)重寫onopendocument函式,讀取文字檔案到字串變數
bool cmfcdoc::onopendocument(lpctstr lpszpathname)
//將檔案讀到str字串
pcfile.read(str.getbuffer(pcfile.getlength()), pcfile.getlength());
pcfile.close(); }
return true; }
(2)ondraw函式中將檔案顯示出來
cdc為我們提供了四個輸出文字的函式:
textout
、exttextout
、tabbedtextout
和drawtext
,分別用於不同的場合。如果想要繪製的文字需要支援
tab符,那麼採用
tabbedtextout
函式,可以使繪製出來的文字效果更佳;如果要在乙個矩形區域內繪製多行文字,那麼採用
drawtext
函式,會更富於效率;如果文字和圖形結合緊密,字元間隔不等,並要求有背景顏色或矩形裁剪特性,那麼
exttextout
函式就將是最
好的選擇。如果沒有什麼特殊要求,那使用
textout
函式就顯得簡練了。
pdc->drawtext(pdoc->str,pdoc->str.getalloclength(),crect(0,0,1000,1000),dt_wordbreak);
MFC單文件開啟檔案預設字尾名修改
做單文件程式時,預設開啟文件字尾為 如果我們需要自定義開啟字尾時,需要對文件模板相關函式做過載。cpp view plain copy class cmysingledoctemplate public csingledoctemplate virtual bool getdocstring cst...
MFC單文件分欄
平台 vs2017 功能 建立單文件程式,並將視窗分成左右兩個 1.在cmainframe.h中新增乙個csplitterwnd成員 中新增以下內容 public csplitterwnd msplitwin1 2 基於cview建立兩個新的檢視類,cviewleft,cviewright 中新增以...
MFC 單文件 建立
據嚮導建立的單文件時候,view類的基類選擇 cformview,這樣可使用控制項 根據嚮導建立單文件,在 使用者介面功能 取消 使用傳統的停靠工具欄 可選 如果支援mysql資料庫 在資料庫支援的頁面 資料庫支援 選擇 不提供檔案支援的資料庫檢視 客戶端型別選 odbc 型別選擇 快照 資料來源 ...