DRAWITEMSTRUCT结构

来源:互联网 发布:淘宝有积分的信用卡 编辑:程序博客网 时间:2024/05/17 03:47

 

DRAWITEMSTRUCT结构如下:

 

  1. typedef struct tagDRAWITEMSTRUCT  
  2. {  
  3.   
  4.   UINT CtlType; //控件类型;  
  5.   UINT CtlID; //组合框、列表框等控件的ID标识号;  
  6.   UINT itemID; //菜单项的ID标识号或列表框、组合框中某一项的索引值;  
  7.   UINT itemAction; //控件行为;  
  8.   UINT itemState; //控件状态;  
  9.   HWND hwndItem; //父窗口句柄或菜单句柄  
  10.   HDC hDC; //控件对应的绘图设备句柄  
  11.   RECT rcItem; //控件所占据的矩形区域  
  12.   DWORD itemData; //列表框或组合框中某一项的值  
  13.   
  14. }  


【结构成员】 

 

CtlType——指定了控件的类型,有以下几种取值:

ODT_BUTTON 自绘制按钮
ODT_COMBOBOX 自绘制组合框
ODT_LISTBOX 自绘制列表框
ODT_MENU 自绘制菜单项
ODT_LISTVIEW 自绘制列表视
ODT_STATIC 自绘制静态控件
ODT_TAB Tab控件

CtlID——指定了需要自绘制的控件ID,而对于菜单项无需使用。

itemID——是菜单项的ID或列表框或组合框的索引,对于一个空的列表框或组合框,该成员的值为-1。


itemAction——绘制动作,有以下几种取值:


ODA_DRAWENTIRE 整个控件都需被绘制
ODA_FOCUS 控件需要获得或失去焦点时被绘制
ODA_SELECT 控件需要在被选中时绘制

itemState——当绘制完成后的,所绘项的可见状态,有以下几种取值:

ODS_CHECKED 如果菜单项将被选中,则设置该值(只对菜单项有效)
ODS_DISABLED 如果绘制项将被禁止,则设置该值
ODS_FOCUS 如果绘制项需要输入焦点,则绘制该值
ODS_GRAYED 如果绘制项需要被灰色显示,则设置该值
ODS_SELECTED 如果绘制项需要被设置为选中状态,则设置该值
ODS_COMBOBOXEDIT 在自绘制组合框中只绘制选择区域
ODS_DEFAULT 自绘制项为默认项,表示当前控件处于默认状态;

hwndItem——指定了组合框、列表框和按钮等自绘制控件的窗口句柄;包含菜单项的菜单句柄(HMENU)
                      
假如自绘的对象时菜单项,则表示包含该菜单项的菜单句柄。

hDC——设备环境的句柄。
rcItem——控件外观大小的矩形。

这个矩形区域就是上面hDC的作用范围。系统会自动裁剪组合框、列表框或按钮等控件的自绘制区域以外的部分。
也就 是说rcItem中的坐标点(0,0)指的就是控件的左上角。但是系统不裁剪菜单项,所以在绘制菜单项的时候,
必须先通过一定的换算得到该菜单项的位置, 以确保绘制操作在我们希望的区域中进行。


itemData——传递给控件的值。


这个成员变量最为关键,菜单自绘时所需要的图标、文本等信息都是通过他获取的,
至于他的具体值,是通过CMenu类的CMenu::AppendMenu()、CMenu::InSertMenu()、
CMenu::ModifMenu()等函数的调用来传递的。


上面这个结构中,成员变量CtlType等于ODT_COMBOBOX 时,表示当前控件为自绘型的组合框,等于ODT_LISTBOX时表示当前控件为自绘列表控制件,等于ODT_MENU 时表示当前控件为自绘菜单。对于组合框和列表框控件,成员变量itemData是通过相应的AddString()、InsertString()获取的,对于菜单控件,成员变量itemData和DRAWITEMSTRUCT结构中的itemData是一致的。

原创粉丝点击