0

我有一个带有样式的自定义绘制组合框,CBS_DROPDOWNLISTCBS_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静态部分,而对于下拉列表的项目,它返回ODT_LISTBOX

我想知道如何解决这个问题,如何检测到我正在绘制下拉列表中的静态部分或常规项目?

4

1 回答 1

1

我只是检查 ODS_COMBOBOXEDIT 的状态。如果文档表明为编辑控件设置了此标志,则它适用于下拉列表。

我已经检查了像您一样以正常方式工作的组合框实现。

bool bDrawStaticControl = (pDIS->itemState & ODS_COMBOBOXEDIT)!=0;
于 2014-03-10T09:09:25.040 回答