DRAWITEMSTRUCT结构提供了所有者窗口必须确定如何绘制所有者绘制的控件或菜单??项的信息。所有者绘制的控件或菜单??项的所有者窗口作为WM_DRAWITEM消息的【lParam的】参数接收到此结构的指针。
typedef struct tagDRAWITEMSTRUCT { // dis
UINT CtlType;
UINT CtlID;
UINT itemID;
UINT itemAction;
UINT itemState;
HWND hwndItem;
HDC hDC;
RECT rcItem;
DWORD itemData;
} DRAWITEMSTRUCT;
会员
CtlType
指定控件类型。该成员可以是以下值之一:
值 | 含义 |
ODT_BUTTON | 所有者按钮 |
ODT_COMBOBOX | 所有者组合框 |
ODT_LISTBOX | 所有者列表框 |
ODT_LISTVIEW | 列表视图控件 |
ODT_MENU | 所有者菜单项 |
ODT_STATIC | 所有者静态控制 |
ODT_TAB | 标签控件 |
CtlID
指定组合框,列表框,按钮或静态控件的标识符。该成员不用于菜单项。
itemID
指定菜单项的菜单项标识符或列表框或组合框中项的索引。对于空列表框或组合框,此成员可以为-1。这允许应用程序仅绘制由rcItem成员指定的坐标处的焦点矩形,即使控件中没有任何项目。这向用户指示列表框或组合框是否具有焦点。itemAction成员中的位如何设置是否要绘制矩形,就像列表框或组合框具有焦点一样。
itemAction
指定所需的绘图操作。该成员可以是以下一个或多个值:
值 | 含义 |
ODA_DRAWENTIRE | 需要绘制整个控件。 |
ODA_FOCUS | 控制已经失去或获得了键盘焦点。应检查ITEMSTATE成员以确定控件是否具有焦点。 |
ODA_SELECT | 选择状态已更改。应检查ITEMSTATE成员以确定新的选择状态。 |
ITEMSTATE
指定当前绘图操作发生后项目的视觉状态。该成员可以是以下值的组合:
值 | 含义 |
ODS_CHECKED | 要检查菜单项。该位仅在菜单中使用。 |
ODS_COMBOBOXEDIT | 绘图发生在所有者组合框的选择字段(编辑控件)中。 |
ODS_DEFAULT | 该项目是默认项目。 |
ODS_DISABLED | 该项目被绘制为禁用。 |
ODS_FOCUS | 该项目具有键盘焦点。 |
ODS_GRAYED | 该项目将变灰。该位仅在菜单中使用。 |
ODS_SELECTED | 选择菜单项的状态。 |
hwndItem
标识组合框,列表框,按钮和静态控件的控件。对于菜单,此成员标识包含该项目的菜单。
hDC
识别设备上下文;在对控件执行绘图操作时,必须使用此设备上下文。
rcItem
指定一个矩形,定义要绘制的控件的边界。该矩形位于hDC成员指定的设备上下文中。Windows自动剪辑所有者窗口在设备上下文中为组合框,列表框和按钮绘制的任何内容,但不剪辑菜单项。绘制菜单项时,所有者窗口不得绘制在由rcItem成员定义的矩形的边界之外。
的ItemData
指定与菜单项相关联的应用程序定义的32位值。对于控件,此参数指定最后分配给列表框或组合框的值由LB_SETITEMDATA或CB_SETITEMDATA消息。如果列表框或组合框具有LBS_HASSTRINGS或CBS_HASSTRINGS样式,则此值最初为零。否则,此值最初是传递给以下消息之一的【lParam的】参数中的列表框或组合框的值:
CB_ADDSTRING
CB_INSERTSTRING
LB_ADDSTRING
LB_INSERTSTRING
如果ctlType为ODT_BUTTON或ODT_STATIC,则的ItemData为零。
也可以看看
CB_ADDSTRING, CB_INSERTSTRING, CB_SETITEMDATA, LB_ADDSTRING, LB_INSERTSTRING, LB_SETITEMDATA, WM_DRAWITEM