Я хотел бы отключить элемент в выпадающем списке в моем приложении Win32 (C ++). Я не совсем уверен, как это сделать. Я пытаюсь добиться чего-то похожего на это:
Обратите внимание, что CollectionItem2 и 3 неактивны.
Любая помощь будет очень высоко ценится!
Если вам действительно нужен для этого комбинированный список, то (как сказал @IInspectable) вам нужно будет сделать собственный нарисованный элемент управления. По сути, вам придется хранить некоторую информацию о том, какие элементы отключены / выделены серым цветом, и рисовать элементы соответствующим образом в зависимости от того, включены они или нет.
Там может быть несколько проще, хотя. Обычно это делается с помощью кнопки Split. Это кнопка с BS_SPLITBUTTON
набор стилей. При нажатии на раскрывающуюся часть кнопки она отправляет BCN_DROPDOWN
уведомление.
Обычно вы реагируете на это, отображая меню, обычно используя TrackPopupMenu
чтобы отобразить его сразу под кнопкой (или сразу же, если хотите). Это обычное меню, поэтому в нем могут быть включены, отключены, выделены серым цветом элементы, установлены флажки и т. Д.
Если вы используете MFC, он имеет CSplitButton
класс, который оборачивает кнопку Split, немного упрощая код — вы можете передать идентификатор меню и подменю при создании CSplitButton
объект, и он обрабатывает вещи оттуда.
Пример результата, вероятно, выглядит довольно знакомым:
Примечание: MFC также имеет CMfcMenuButton
учебный класс. Это имеет примерно схожую функциональность, но несколько неудобно в использовании. Если память служит, она совместима с более старыми версиями Windows (но кнопка разделения возвращается к Vista, так что все в порядке, если вам действительно не нужна поддержка XP).
Других решений пока нет …