我有一个带有样式CBS_DROPDOWNLIST
和CBS_OWNERDRAWVARIABLE
的自定义绘制组合框我可以绘制下拉列表中的项目,但是当用户选择它在组合框静态部分中绘制的项目时[组合部分]选择项目并显示选择后保持可见],我想给它一个自定义文本,如下图所示
但是我无法确定它找到了像这样的代码
if(DrawItemStruct.CtlType == ODT_COMBOBOX)//the static part of the combo
DrawComboText(pDC, DrawItemStruct.itemID, &DrawItemStruct.rcItem);
else//the rest items
{
// Copy the text of the item to a string
char sItem[256];
GetString(sItem, DrawItemStruct.itemID);
biDrawText(pDC, sItem, -1, &DrawItemStruct.rcItem, f | DT_VCENTER | DT_SINGLELINE);
}
但是当我使用它时,我得到的所有项目都有CtlType == ODT_COMBOBOX
,当我调试上面的代码时,它返回ODT_COMBOBOX
作为静态部分,对于下拉列表的项目,它返回{{ 1}}。
我想知道如何解决这个问题,如何检测我在下拉列表中绘制静态部分或常规项?
答案 0 :(得分:0)
我只是检查ODS_COMBOBOXEDIT的状态。如果dcumentation表示为编辑控件设置了此标志,则它适用于下拉列表。
我已经检查过像你这样有效的组合框实现。
bool bDrawStaticControl = (pDIS->itemState & ODS_COMBOBOXEDIT)!=0;