Отключение элемента ComboBox в Win32 API

Я хотел бы отключить элемент в выпадающем списке в моем приложении Win32 (C ++). Я не совсем уверен, как это сделать. Я пытаюсь добиться чего-то похожего на это:

Отключенный элемент комбинированного списка

Обратите внимание, что CollectionItem2 и 3 неактивны.

Любая помощь будет очень высоко ценится!

1

Решение

Если вам действительно нужен для этого комбинированный список, то (как сказал @IInspectable) вам нужно будет сделать собственный нарисованный элемент управления. По сути, вам придется хранить некоторую информацию о том, какие элементы отключены / выделены серым цветом, и рисовать элементы соответствующим образом в зависимости от того, включены они или нет.

Там может быть несколько проще, хотя. Обычно это делается с помощью кнопки Split. Это кнопка с BS_SPLITBUTTON набор стилей. При нажатии на раскрывающуюся часть кнопки она отправляет BCN_DROPDOWN уведомление.

Обычно вы реагируете на это, отображая меню, обычно используя TrackPopupMenu чтобы отобразить его сразу под кнопкой (или сразу же, если хотите). Это обычное меню, поэтому в нем могут быть включены, отключены, выделены серым цветом элементы, установлены флажки и т. Д.

Если вы используете MFC, он имеет CSplitButton класс, который оборачивает кнопку Split, немного упрощая код — вы можете передать идентификатор меню и подменю при создании CSplitButton объект, и он обрабатывает вещи оттуда.

Пример результата, вероятно, выглядит довольно знакомым:

введите описание изображения здесь

Примечание: MFC также имеет CMfcMenuButton учебный класс. Это имеет примерно схожую функциональность, но несколько неудобно в использовании. Если память служит, она совместима с более старыми версиями Windows (но кнопка разделения возвращается к Vista, так что все в порядке, если вам действительно не нужна поддержка XP).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]