afx_msg void OnDrawItem( int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct );
Parameters
nIDCtl
存储发送WM_DRAWITEM 消息的控件ID,如果是菜单发送的,nIDCtl 的值为0。
lpDrawItemStruct
一个指向DRAWITEMSTRUCT 结构体的指针,该结构体保存有关要被绘制的项目与绘制所需要的类型等星系。
Remarks
当自绘按钮(owner-draw button),下拉列表框(combo box),列表框(list box)视觉属性,或者菜单发生变化时,框架为他们的owner调用该函数。
DRAWITEMSTRUCT结构的itemAction 成员定义了要进行的绘制操作行为。该值确定了所需的绘制动作。
在处理完此消息之前,应用程序应当确保由DRAWITEMSTRUCT 结构的成员hDC 标识的设备上下文还原到默认状态。
如果上面结构的成员hwndItem 指向CButton,CMenu,CListBox或者CComboBox 对象,那么就调用相应类的DrawItem 虚函数。重载相应类的DrawItem 成员函数来绘制各个项。
其他的一些说明:
OnPaint()这个函数是在已经有形的控件上进行画图的
OnPaint()
{
在这里只是画原控件没有的图形
}
OnDrawItem()这个函数是自已去绘画一个控件,根据你想要的形状,图案.它是建立一个控件的外表而用到的
可以这样理解,OnDrawItem是画窗口中的子控件的,因为它的入口参数LPDRAWITEMSTRUCT带入不同子控件的相关参数,而且,你得把字控件设置成“自画”类型,才会调用到OnDrawItem,顺便说一下自画,不是所有设置成自画类型的控件都会调用父窗口的OnDrawItem,例如ListBox的自画,你就必须重载CListBox的DrawItem方法和MeasureItem方法才可以,但象菜单,按钮等的自画则会调用OnDrawItem。OnPaint和OnDrawItem不在一个范畴内,他是WM_PAINT的响应函数,凡是基于CWnd的类都有OnPaint事件发生,就是说凡是窗口都有WM_PAINT事件发生。(不知道我理解的对不对)