声明:转载此文档时请注意转载来源和我的名字,本人水平有限翻译有误处请指出
DRAWITEMSTRUCT
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 TAB控件
CtlID
指定combo box(组合框), list box(列表框),控钮(button),或静态控件(combo box)的标识符.这个成员不能被一个菜单项使用.
itemID
表示一个指定菜单项的标识符或combo box(组合框), list box(列表框)的索引.对于一个空的combo box(组合框), list box(列表框),这个成员可以是-1。
即使控件在那里没有项目,不管用户指出combo box(组合框)或list box(列表框)是否有焦点,应用程序都会绘制焦点矩形,由rcItem成员给出坐标.
虽然combo box(组合框), list box(列表框)已经有焦点,但可以通过设置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 菜单项的状态是被选中的
ODS_HOTLIGHT Windows 98/Me, Windows 2000/XP: 项目有热跟踪,换句话说,鼠标在项目上面的时候,项目将被加亮
ODS_INACTIVE Windows 98/Me, Windows 2000/XP: 项目是非活动的和窗体有关的菜单是非活动的。
ODS_NOACCEL
Windows 2000/XP: 控件不绘制键盘加速提示
ODS_NOFOCUSRECT
Windows 2000/XP: 控件不绘制焦点提示标记
hwndItem
combo box(组合框), list box(列表框),控钮(button),或静态控件(combo box)控件的句柄.对于菜单,这个成员是包含菜单项的菜单句柄
hDC
设备上下文的句柄;这个设备上下文必需在要绘图操作时使用。
rcItem
定义将被绘制的矩形边界.这个矩形是hDC成员指定的设备上下文.(笔者注:矩形与hdc是一样的大小),系统自动裁剪
combo box(组合框), list box(列表框),控钮(button)在所有者窗体的设备上下文
(注:使用控件自己的坐标系,rcItem中的坐标点(0,0)指的就是控件的左上角),但不裁剪菜单项.
当绘制菜单项的时候,所有者窗体不应在rcItem成员定义矩形边界之外给制.
itemData
应用程序定义与菜单项相关联的值.对于控件,这个参数最后分配给列表框(list box)或组合框(combo box)的LB_SETITEMDATA或CB_SETITEMDATA消息
如果列表框(list box)或组合框(combo box)已经有LBS_HASSTRINGS或CBS_HASSTRINGS风格,这个值最初是零,
否则,这个值最初的值是传给列表框(list box)或组合框(combo box)
下列消息中lparam参数的一个值:
CB_ADDSTRING
CB_INSERTSTRING
LB_ADDSTRING
LB_INSERTSTRING
如果CtlType是ODT_BUTTON或ODT_STATIC,itemData是零.
备注
少量的控件类型,不设置CtlType。这样的是状态条