MFC MDI 視窗函式執行順序

2021-08-28 02:32:45 字數 1364 閱讀 8635

(1)mdi視窗初始化時建立順序(預設開啟乙個新文件):

adddoctemplate(pdoctemplate); cmainframe* pmainframe = new cmainframe;

cmainframe::precreatewindow() 兩次, cmainframe::oncreate,

cmfc_framedoc()建構函式,

cchildframe()建構函式, cchildframe::precreatewindow 三次, 

cmfc_frameview()建構函式, cmfc_frameview::precreatewindow一次

再cchildframe::oncreate(),(如果主視窗有onwindowposchanged(),則會響應,可在此處使

cchildframe視窗移動),

再cmfc_framedoc::onnewdocument()建立新文件.

(2)有主視窗後,新建乙個檢視的過程(即按[新建]選單):

cmfc_framedoc()建構函式,

cchildframe()建構函式, cchildframe::precreatewindow 三次, ,

cmfc_frameview()建構函式, cmfc_frameview::precreatewindow一次

(2.1)關閉乙個視窗view時,析構與建立相反:

~cmfc_frameview(), ~cchildframe(), ~cmfc_framedoc().

(3)在view的函式中呼叫destroywindow();來即關閉view視窗時,doc析構,但cchildframe依然存在,如果 frame有工具欄*******,且*******的父視窗是該cchildframe,那麼該*******仍然可以使用(因為該 *******屬於cchildframe,cchildframe不消失,該*******也不消失),但某些按鈕會變灰,如[儲存],因 為沒有view,所以也無[儲存]一說了.

而且此時,cchildframe仍可以成為當前活動框架,即:

cchildframe *p= dynamic_cast < cchildframe*> (getactiveframe());p仍有效,非0.

注:我起的名字是mfc_frame,所以會有cmfc_framedoc,cmfc_frameview.

(4)在view的函式中getparentframe()->destroywindow(),即關閉整個框架,則view,doc,frame全部關 閉,析構順序為: ~cmfc_frameview(), ~cmfc_framedoc(), ~cchildframe(). 此時不能再destroywindow()來關閉view了,否則會出錯,因為關閉frame時把view,doc,frame全都關閉 了.

設定MFC MDI視窗框架的背景顏色

由於mdi框架的客戶區被另乙個視窗的框架所覆蓋,為了改變客戶區的背景色,需要重畫這個客戶視窗,這裡所用到的技術叫子類化。具體方法如下 第一步 從cwnd繼承第乙個類cmdiclient 並新增wm erasebknd訊息函式 cmdiclient message handlers bool cmdi...

建構函式的執行順序

任何建構函式都可以進行配置,以便在執行自己的 前呼叫其它建構函式。我們首先看看在建立類的例項時會發生什麼情況。為了例項化派生的類,必須例項化它的基類。而要例項化這個基類,又必須例項化這個基類的基類,這樣一直例項化到system.object為止。結果是無論使用什麼建構函式例項化乙個類,總是要先呼叫s...

python函式執行順序梳理

def haha 第一步 name 你好 第三步 print name 第四步 def lele 第六步 name 我好 第七步 print name 第八步 def hehe 第十一步 name 他好 第十二步 print name 第十三步 print name 第九步 hehe 第十步 lel...