posts - 45,  comments - 11,  trackbacks - 0

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 指向CButtonCMenuCListBox或者CComboBox 对象,那么就调用相应类的DrawItem 虚函数。重载相应类的DrawItem 成员函数来绘制各个项。

 

其他的一些说明:

OnPaint()这个函数是在已经有形的控件上进行画图的      
  OnPaint()  
  {  
      在这里只是画原控件没有的图形  
  }  
   
  OnDrawItem()这个函数是自已去绘画一个控件,根据你想要的形状,图案.它是建立一个控件的外表而用到的

 

可以这样理解,OnDrawItem是画窗口中的子控件的,因为它的入口参数LPDRAWITEMSTRUCT带入不同子控件的相关参数,而且,你得把字控件设置成“自画”类型,才会调用到OnDrawItem,顺便说一下自画,不是所有设置成自画类型的控件都会调用父窗口的OnDrawItem,例如ListBox的自画,你就必须重载CListBox的DrawItem方法和MeasureItem方法才可以,但象菜单,按钮等的自画则会调用OnDrawItem。OnPaint和OnDrawItem不在一个范畴内,他是WM_PAINT的响应函数,凡是基于CWnd的类都有OnPaint事件发生,就是说凡是窗口都有WM_PAINT事件发生。(不知道我理解的对不对)

posted on 2009-12-06 18:35  !-_-木糖-_-!  阅读(4474)  评论(0编辑  收藏