而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:虛函數,需要重載
OnDrawItem是畫窗口中的子控件的,因為它的入口參數LPDRAWITEMSTRUCT帶入不同子控件的相關參數,而且,你得把字控件設置成“自畫”類型,才會調用到OnDrawItem,順便說一下自畫,不是所有設置成自畫類型的控件都會調用父窗口的OnDrawItem,例如ListBox的自畫,你就必須重載CListBox的DrawItem方法和MeasureItem方法才可以,但象菜單,按鈕等的自畫則會調用OnDrawItem。
OnPaint和OnDrawItem不在一個范疇內,他是WM_PAINT的響應函數,凡是基於CWnd的類都有OnPaint事件發生,就是說凡是窗口都有WM_PAINT事件發生。