視圖窗口完全建立後第一個被框架調用的函數。框架在第一次調用OnDraw前會調用OnInitialUpdate,因此 OnInitialUpdate是設置滾動視圖的邏輯尺寸和映射模式的最合適的地方。
時間上,兩者先後順序不同,構造函數生成本類的對象,但沒有產生窗口,OnCreate後窗口
產生,
然後纔是視圖的OnInitialUpDate,一般在這裏對視圖的顯示做初始化。簡單點,就是ONCREATE只是產生VIEW的基本結構和變量而在
OnInitialUpDate()中,主要初始化視圖中控件等。對各個變量進行初始化操作。
例子。我們要在視圖中添加一個button和combobox控件則
OnCreate函數中寫法如下:
OnInitialUpDate中寫法
在MFC程序設計中,按照傳統的設計,如果處理WM_PAINT消息,一般會派生一個
OnPaint函數,映射到WM_PAINT消息上進行繪圖處理。但是很多程序中並沒有出現OnPaint,一個OnDraw函數做了更多的繪圖操作。而
在消息映射的列表中,也沒有見到WM_PAINT到OnDraw的映射。
實際上,OnDraw不是OnPaint的映射,出現OnDraw,是爲了實現各種不同的設備
上的繪圖一致性。
首先,讀者需要明白的是,WM_PAINT消息是爲了繪製屏幕而出現的,因此,在
OnPaint中,我們只能存取屏幕DC,進行繪製,常見的代碼是:
void MyWnd::OnPaint()
{
CPaintDC dc(this);
//draw code here
}
這裏的CPaintDC的構造函數會自動調用BeginPaint,獲得一個屏幕DC,並附加
在dc對象上。當dc對象析構時,系統自動調用EndPaint並使invalidated
rectangle變成validated狀態,從而結束繪製。(注意,重複創建CPaintDC實例會失敗也因爲如此)
如果我們在OnPaint中繪製,那麼在打印機上繪製我們就需要再寫一個OnPrint函數,
重新繪製。這樣,程序設計者就需要維護兩套代碼。爲了簡化操作,MFC框架把大部分繪製操作都放在OnDraw中,OnPaint和OnPrint只構造
相應的DC,然後分別調用OnDraw.也就是說,OnDraw適用於所有的設備,而OnPaint只適用於屏幕。
大家在設計過程中必須注意:OnDraw是被基類的OnPaint主動調用的,如果你繼承了
OnPaint,你應該要麼調用基類的OnPaint(此前不得創建CPaintDC實例,也不得調用BeginPaint),要麼自己創建
CPaintDC實例,並調用OnDraw.