OnInitialUpdate 方法

 視圖窗口完全建立後第一個被框架調用的函數。框架在第一次調用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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章