1. 程式人生 > >MFC體系結構(2)

MFC體系結構(2)

c++ mfc

一、CWind類

1.工具/提示支持

為用戶提供簡短幫助

a.EnableToolTips打開提示功能

OnToolHitTest判斷是哪個字控件要顯示Tooltip

b.UpdateData (DDV 對話框數據交換) 把MFC成員變量值給控件,或者控件的值交換給成員變量

c.UpdateDialogControls 比如對話框改變大小 刷新對話框控件

d.窗口居中

e.RunModalLoop ContinueModal EndModalLoop

暫時接管線程的消息循環,可以做消息過濾,比如你手動實現模態對話框

你打開對話框,你只有對這個窗口的消息才處理,其他所有的都過濾掉.



二、CFrameWnd類 框架窗口

1.活動框架視圖文檔支持

a.GetActiveDocument()獲取活動激活的文檔

GetActiveView()獲得活動激活的視圖 SetActiveView()設置活動激活視圖

GetActiveFrame() 獲得激活的框架

b.GetTitle() SetTitle() 設置框架標題

c.SetMessageText() 設置消息提示框的標題

d.BeginModalState() EndModalState() InModalState()

輔助對話框模態狀態,模態對話框彈出來的時候,框架窗口是不激活的

但是,不激活的時候,你點擊他會閃動,提示用戶我是不激活的,

都需要上面的API來控制這些狀態.


2.框架窗口和視圖的關系

a.最外層是Frame Window Object 框架窗口對象,顯示整個框架窗口.

b.View Object是一個子窗口,實際上就是客戶區,被View視圖類分配,

共享了框架窗口的DC,框架窗口包著視圖.視圖可以有各種顯示的內容.

c.View視圖負責和Document通訊,這就是一個典型的文檔視圖

應用框架.

技術分享圖片


3.更多的是在派生類裏的支持,尤其是CMDIFrameWnd

他就是說對自己的客戶區劃分,有些客戶區可工具條,給面板,

有些則要給子框架,還有一些客戶區要分配給狀態欄,菜單條.



三、CViwe類 視圖類

1.派生類必須重載方法

a.virtual void OnDraw(CDC* pDC) = 0;

OnPaint裏調用的子方法,OnPaint之前還要對DC做一個預處理

區分你是打印環境,還是打印預覽,還是屏幕顯示,OnDraw裏面

你就不用再去區分現在是打印狀態,我的做標書是什麽樣子等待.

OnDraw就是專心的進行繪制,圖形繪制,信息顯示.

繪制需要的參數,做標什麽的,都在OnPrint裏完成

OnPaint()方法在調用OnDraw方法向顯示器輸出之前需要做大量的準備工作,

其中之一就是準備一個跟顯示器相關的DC對象,並把此對象傳遞給OnDraw方法,讓其用此對象向顯示器輸出

OnPrint()方法在調用OnDraw方法向打印機輸出之前同樣作很多準備工作,

其中之一就是準備一個跟打印機相關的DC對象,並把此對象傳遞給OnDraw方法,讓其用此對象向打印機輸出。


b.virtual void OnUpdate(CView* psender,LPARAM lHint, CObject* pHint);

在文檔內容發生變更的時候,他就通知視圖改變你的顯示,這個往往是用在

一個文檔多個視圖的時候.其中有個視圖有個用戶在這個視圖操作了一個東西,

那就會接到OnUpdate消息,psender是誰發起改變的操作,如果是NULL就是改變

所有的視圖,如果某個視圖發現psender和自己的this是相等的,就表示是自己,

自己則是已經更新過了,則不需要再次更新. 頻繁調用會較低效率.



2.其他重要方法

a.GetDocument()得到視圖對應的文檔

b.OnActivateView()View激活的時候

c.OnActivateFrame()視圖所在框架激活的時候

d.其實這兩個激活任選其一即可,不用再兩個內都寫代碼

因為View實際就代表了框架窗口的客戶區,你框架窗口激活,

你客戶區也必須激活,你客戶區激活框架窗口也激活



3.View種類特點和用途(可用的派生類)

a.CEditview 簡單文本編輯視圖 記事本

b.CFromView 帶豐富控件的類對話框視圖 數據庫應用

c.CHtmlEditviw HTML編輯顯示視圖 HTML編輯器

d.CHtmlView HTML顯示視圖 電子郵件應用.瀏覽器

e.CListView 簡單列表視圖 類電子表格應用(需改進)

f.CRichEditview RTF文本編輯視圖 寫字板等

g.CScrollView 帶滾動條的簡單視圖 繪圖冉家,CAD畫板

h.CTreeView 樹形控件視圖 顯示樹形信息的應用




MFC體系結構(2)