1 mfc單文件程式的主要類
(1)文件類(document)
即應用程式處理的資料物件,文件一般從 mfc 中 cdocument 中派生。cdocument 類用於相應資料檔案的讀取以及儲存 cview 類所需要觀察和處理的資訊。
(2)視類(view)
視相當於文件在應用程式中的觀察視窗,它確定了使用者對文件的觀察方式和使用者編輯文件的方式。對於圖形來說視就好比我們進行繪圖工作的畫布,對圖形的操作都是在視上進行的。另外,視類中有乙個重要的成員函式 ondraw() 函式。過載的 ondraw() 函式要完成兩件事,即呼叫相應的文件的函式獲取文件資料和呼叫 gdi 圖形裝置介面的函式在視中畫出文件資料。
(3)主視窗類(main frame window)
主視窗是 windows 應用程式中限定其所有視窗範圍的最外邊框。應用程式中的所用其它視窗都直接或間接地為主視窗的子視窗,視佔文件視窗的客戶區,而文件視窗又是主視窗的子視窗。
(4)文件模板類(document template)
文件模板類用於協調文件物件、視物件、和主視窗物件的建立過程。它是從類 cdoctemplate 或其派生類中派生的。乙個文件模板可以管理同一文件型別的所有文件。
(6)圖形裝置介面
pc 相容機種上可以連線許多種不同的視訊裝置,所以 gdi 的主要目的之一是支援與裝置無關的圖形。乙個 windows 圖形裝置介面物件型別由乙個 mfc 類庫表示,這些類有乙個共同的抽象基類:cgdiobject。其中有如下一些物件:
cbitmap 位圖物件,用於表示位圖
cbrush 畫刷物件,用於表示區域填充的顏色和樣式
cpen 畫筆物件,用於指定線和邊框的性質,如顏色、線寬、線性等
crgn 區域物件,由多個多邊形和橢圓組成的組合形狀,可以填充、裁剪等操作以及判斷滑鼠是否位於某一點。
cfont 字型物件,具有一定大小和風格的一套字符集。
cpalette 調色盤物件,是一字元對映表, 將邏輯顏色和裝置的實際顏色相互聯絡。
(7)裝置環境類
裝置環境類 cdc 的內容十分豐富,包含了和繪圖有關的方方面面。cdc 類提供的成員函式可以用於對裝置環境的操作、繪圖工具的使用、圖形裝置介面 gdi 物件的選擇等。但在使用 cdc 類物件視時應注意乙個問題:為使用 cdc 物件,須先構造乙個 cdc 物件,然後才能呼叫它的成員函式。使用完成後,必須在適當的方將其刪除,在 windows 環境中可獲得的裝置環境的數量是有限的。
2 建立單文件應用程式一般步驟
在文件內宣告儲存文件資料所需要的資料物件。
完成文件類的onnewdocument函式,初始化新文件。
完成文件類的serialize函式,保持和載入文件資料。
完成檢視類的oninitialupdate函式,初始化顯示
完成檢視類的ondraw函式,顯示當前文件內容
在檢視類中加入可以使使用者編輯文件資料所需的**
3 每個類的關鍵函式
4 mfc單文件框架理解
mfc程式的整個執行機制需要經過:設計視窗類,註冊視窗類,建立視窗,顯示並更新視窗,訊息迴圈。
csingledoctemplate* pdoctemplate; //定義單文件模板物件指標
pdoctemplate = new csingledoctemplate(
idr_mainframe,
runtime_class(cmfcsingledoc),
runtime_class(cmainframe), // main sdi frame window
runtime_class(cmfcsingleview));
adddoctemplate(pdoctemplate); 該單文件模板物件把文件物件、框架物件、視類物件有機的組織到一起。
5 關鍵點
cmainframe類:是程式的框架類,起到了一種容器的作用,這個容器中可以有多個檢視,選單,工具等。注意:在mainframe響應onpaint訊息,自然是可以響應的,但是會看不到繪製內容。應該在view中響應onpaint訊息。
1. 在cmainframe中訪問cview物件和cdoc物件
要訪問這兩個物件可以使用全域性函式getactivedocument()和getactiveview()這樣可以獲得doc物件和view物件的實體了
2. 在cmainframe中呼叫cview物件更新視窗,這裡使用方法如下:getactiveview()->invalidate(false);// 這一句會是cview呼叫ondraw訊息響應函式
getactiveview()->updatewindow();//這句可以加上也可以不加,暫時沒有發現不加會出現什麼問題。
3 在cview內中要獲取到cmianframe可以使用下面的函式:
afxgetmainwnd()
3 取得doc物件
在cmianframe中可以使用getactivedocument()『;
在cview類中包含了乙個cdocument的物件m_pdocument這個物件即使指向doc類的基類物件的,而要實現基類物件到現在doc類物件的轉換只要新增如下函式即可
則可以實現。
4 在檢視(cview)中訪問框架(cframewnd) cframewnd* getparentframe() const;
6
MFC單文件程式架構解析
首先我們了解到的是 圖 一 圖 二 csingledoctemplate pdoctemplate pdoctemplate new csingledoctemplate idr mainframe,runtime class cmainframe main sdi frame windon 這裡體...
MFC單文件程式架構解析
mfc單文件程式架構解析 這裡我以科院楊老師的單文件程式來分析一下mfc單文件的程式架構,純屬個人見解,不當之處煩請指教!首先我們了解到的是 圖 一 圖 二 csingledoctemplate pdoctemplate pdoctemplate new csingledoctemplate idr...
MFC單文件程式架構解析
mfc單文件程式架構解析 這裡我以科院楊老師的單文件程式來分析一下mfc單文件的程式架構,純屬個人見解,不當之處煩請指教!首先我們了解到的是 圖 一 圖 二 csingledoctemplate pdoctemplate pdoctemplate new csingledoctemplate idr...