MFC學習(七) 單文件程式

2022-04-13 06:44:49 字數 2795 閱讀 7471

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;

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...