Как нарисовать статическую часть поля со списком

У меня есть настраиваемое рисованное поле со списком со стилем 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 для статической части, а для элементов раскрывающегося списка он возвращает ODT_LISTBOX.

Я хочу знать, как решить эту проблему, как определить, что я рисую статическую часть или обычный элемент в раскрывающемся списке?


person ahmedsafan86    schedule 08.03.2014    source источник
comment
Мне непонятно. Кажется, вы отвечаете на свой вопрос: ODT_COMBOBOX для текста в статическом элементе управления. ODT_LISTBOX для текста из элемента списка. Это или я не понял вашего вопроса.   -  person manuell    schedule 08.03.2014
comment
Это то, что я взял из другого исходного кода, но ODT_LISTBOX никогда не отправлял, это всегда был ODT_COMBOBOX, в источнике, который я скопировал из него, работает нормально, я не знаю, что я пропустил   -  person ahmedsafan86    schedule 08.03.2014
comment
Я работаю со статической частью, проверяя DrawItemStruct.itemID == -1   -  person user1793036    schedule 10.03.2014
comment
@ user1793036: это нормально, если нет выбранного элемента из комбинации, когда вы выбираете элемент, скажем, индекс элемента = 2, затем, когда список закрыт и при рисовании статической части, itemID == 2.   -  person ahmedsafan86    schedule 10.03.2014


Ответы (1)


Я просто проверяю состояние ODS_COMBOBOXEDIT. Если в документации указано, что этот флаг установлен для элемента управления редактированием, он работает для раскрывающегося списка.

Я проверил реализацию поля со списком, как и вы, которая работает нормально.

bool bDrawStaticControl = (pDIS->itemState & ODS_COMBOBOXEDIT)!=0;
person xMRi    schedule 10.03.2014