VC++中關於控件重繪函數/消息 OnPaint,OnDraw,OnDrawItem,DrawItem的區別


而OnPaint()是CWnd的類成員,同時負責響應WM_PAINT消息。

OnDraw()是CVIEW的成員函數,並且沒有響應消息的功能。這就是為什么你用VC成的程序代碼時,在視圖類只有OnDraw沒有OnPaint的原因。

我們一般用OnPaint維護窗口的客戶區(例如我們的窗口客戶區加一個背景圖片),用OnDraw維護視圖的客戶區(例如我們通過鼠標在視圖中畫圖)。

 =====================================================================================================================

1.OnPaint: WM_PAINT
  消息函數,接受到WM_PAINT消息時,首先調用的是onpaint(),onpaint()再調用ondraw()

 OnPaint()-àOnDraw();

2.OnDraw:虛函數,需要重載

3.OnDrawItem: WM_DRAWITEM

 子控件有自畫屬性且控件需重畫時,父窗口會調用該函數

  在具有Owner Draw屬性的控件需要重畫的時候,就會激發OnDrawItem

 當自畫子按鈕控件、組合框控件、列表框控件或菜單的可視部分需要被畫出時調用這個函數

 OnDrawItem()-àDrawItem();

4.DrawItem:虛函數,需要重載

  如果使用DrawItem來自畫控件,需要給控件加上自畫樣式,然后重載該控件類的自畫函數(DrawItem)函數,如果該控件的父窗口提供了ON_WM_DRAWITEM消息映射宏,並重載了OnDrawItem函數,則重畫消息會由父窗口處理,父窗口調用基類的OnDrawItem來調用派生的子控件的DrawItem函數.
 
======================================================================================================================

OnDrawItem是畫窗口中的子控件的,因為它的入口參數LPDRAWITEMSTRUCT帶入不同子控件的相關參數,而且,你得把字控件設置成“自畫”類型,才會調用到OnDrawItem,順便說一下自畫,不是所有設置成自畫類型的控件都會調用父窗口的OnDrawItem,例如ListBox的自畫,你就必須重載CListBox的DrawItem方法和MeasureItem方法才可以,但象菜單,按鈕等的自畫則會調用OnDrawItem。 

OnPaint和OnDrawItem不在一個范疇內,他是WM_PAINT的響應函數,凡是基於CWnd的類都有OnPaint事件發生,就是說凡是窗口都有WM_PAINT事件發生。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM