所有者组合框

【勇芳软件工作室】汉化HomePreviousNext

应用程序可以创建一个【自绘】组合框来承担绘画列表项的责任。所有者组合框(其【所有者】)的父窗口或对话框在组合框的一部分需要绘制时收到WM_DRAWITEM消息。所有者绘制的组合框可以列出除文本字符串以外的信息。所有者组合框可以是任何类型。但是,简单或下拉组合框中的编辑控件只能显示文本,而所有者在下拉列表框中绘制选择字段。

所有者绘制的组合框的所有者必须处理WM_DRAWITEM消息。每当组合框的一部分必须重新绘制时,就会发送此消息。所有者可能需要处理其他消息,具体取决于为组合框指定的样式。

应用程序可以通过指定CBS_OWNERDRAWFIXED或CBS_OWNERDRAWVARIABLE样式来创建所有者绘制的组合框。如果组合框中的所有列表项都具有相同的高度,例如字符串或图标,则应用程序可以使用CBS_OWNERDRAWFIXED样式。如果列表项的高度不同,则不同大小的位图,例如应用程序可以使用CBS_OWNERDRAWVARIABLE样式。

所有者绘制的组合框的所有者可以处理WM_MEASUREITEM消息以指定组合框中列表项的尺寸。如果应用程序使用CBS_OWNERDRAWFIXED样式创建组合框,Windows将仅发送WM_MEASUREITEM消息一次。所有者指定的维度用于所有列表项。如果使用CBS_OWNERDRAWVARIABLE样式,Windows将为添加到组合框的每个列表项发送WM_MEASUREITEM消息。所有者可以随时通过使用CB_GETITEMHEIGHTCB_SETITEMHEIGHT消息来确定或设置列表项的高度。

如果显示在所有者绘制的组合框中的信息包含文本,则应用程序可以通过指定CBS_HASSTRINGS样式来跟踪每个列表项的文本。具有CBS_SORT风格的组合框将根据此文本排序。如果组合框被排序而不是CBS_HASSTRINGS样式,则所有者必须处理WM_COMPAREITEM消息。

在所有者绘制的组合框中,所有者必须跟踪包含文本之外的信息或除文本之外的信息的列表项。一个方便的方法是将信息的句柄保存为项目数据。有关项目数据的更多信息,请参阅与列表项相关联的数据.要释放与组合框中的项目相关联的数据对象,所有者可以处理WM_DELETEITEM消息。

有关所有者绘制的组合框的示例,请参阅创建一个所有者绘制的组合框.