OnInitinstance是全域性的初始化,一般編程習慣是所有的全域變數,如果有需要初始化的,應放在這裡進行初始化。比如有一個全域字型CFont g_SystemFont,則這個字型的Create應該放在OnInitinstance中執行,並且失敗時應返回FALSE以退出程式,表示它是程式啟動並執行基本,失敗則程式不可以執行。
CView的構造只應該放一些和視相關且獨立於文檔的初始化語句。所謂獨立於文檔,指每次開啟新的文檔時不會變化的屬性。比如一個Windows內建的Notepad文字編輯器,裡面有一個自動換行的選項,如果在這個.txt檔案開啟時使用者將它開啟了自動換行,則在開啟下一個.txt時它都將繼續保持為開啟,不因為開啟新的文檔而變化。這個選項就應該在CView的構造中初始化。
OnInitUpdate只應該放一些和視相關且也相關於文檔的初始化語句。比如Notepad中,每個文檔開啟時,都要自動根據.txt檔案的前幾個位元組判斷它的編碼方式(是UTF8或是Unicode或是ANSI)。這個選項會因為不同的.txt的設定而不同,則應該在OnInitUpdate中檢測文檔的編碼方式並記錄起來(當然,編碼方式這個選項在實際編寫時很可能會作為文檔類的屬性而不是視的屬性,在這裡只是舉例說明一下罷了)。
PreCreateWindow是CWnd的重載函數,特指當你需要新建立一種特性的視窗時(也就是子類化,不過MFC幫你封裝了起來,使得使用從CWnd派生的形式來實現子類化一個新的特性的視窗,這也是為什麼MFC會較其他視窗封裝技術慢的主要原因之一,因為使用了虛函數),在建立之前調用PreCreateWindow以允許你設定一些這個新特性的視窗一些東西。比如視窗類別(WNDCLASSEX)裡的結構有指明此視窗是否需要接收滑鼠雙擊訊息,因此如果你的新特性的視需要接收滑鼠雙擊訊息,就應該在PreCreateWindow中設定。亦或者你的新特性的視窗不想有WS_BORDER風格(即不繪製邊界,CView就會要求沒有WS_BORDER)並且想強制說明此視窗只能作為子視窗建立,那麼可以在PreCreateWindow中對cs.lStyle加上WS_BORDER和WS_CHILD風格