本片文章建立在组合框入门的文章之上,将会介绍拥有者绘制组合框。
拥有者绘制组合框在建立时需要包含CBS_OWNERDRAWFIXED风格或者CBS_OWNERDRAWVARIBLE风格。
对于拥有者绘制组合框来说,你需要处理在父窗口处理两个消息,一个是WM_MEASUREITEM消息,这个消息的wParam参数是控件标识符,lParam是一个指向MEASUREITEMSTRUCT结构体的指针,
typedef struct MEASUREITEMSTRUCT {
UINT CtlType;
UINT CtlID;
UINT itemID;
UINT itemWidth;
UINT itemHeight;
ULONG_PTR itemData;
} MEASUREITEMSTRUCT;
这个结构体的CtlType是控件类型,有ODT_COMBOBOX,ODT_LISTBOX,ODT_LISTVIEW,ODT_MENU四种,分别代表组合框,列表框,列表视图控件和菜单;
CtlID是控件标识符,只对组合框和列表框有意义;
itemID是项目标识符,只有当风格是CBS_OWNERDRAWVARIBLE,LBS_OWNERDRAWVARIBLE或者是CtlType是ODT_MENU才有意义;
itemWidth,是一个菜单项目的宽度,以像素为单位,程序要指定这个值;
itemHeight,一个独立项目在列表框,组合框或者菜单的高度,以像素为单位,程序要指定这个值;
itemData,对于菜单来说,这个值是程序指定的和菜单项目联系的的值,对于控件来说,这个成员指定上次通过LB_SETITEMDATA或者CB_SETITEMDATA消息分配给组合框或者列表框的值,如果列表框或者组合框有HASSTRINGS风格,那么这个值初始为零。
注:如果风格中带有VARIABLE,那么这个消息会为了每一个项目都发送一次这个消息,否则,只会发送一次。
另一个需要处理的消息是WM_DRAWITEM,wParam参数是控件标识符,lParam参数是DRAWITEMSTRUCT结构体,这部分和之前在讲按钮的时候差不多,我就不多说了,文章链接放上。
以上便是本文的全部内容,欢迎评论。