Пользовательский выпадающий список для CComboBox - PullRequest
4 голосов
/ 11 апреля 2010

Я пытаюсь создать собственный выпадающий список для производной от CComboBox. В раскрывающемся списке будет элемент управления календарем и несколько «горячих точек», например,

Изображение размещено на ImageShack.us http://img59.imageshack.us/img59/394/calctrl.png

Так что я считаю, что лучший способ добиться этого - иметь простой класс CWnd, который является родительским для элемента управления календаря, и заставить его рисовать горячие точки.

Окно должно быть всплывающим окном, я думаю, а не дочерним окном, чтобы оно не обрезалось. Но это приводит к тому, что диалог (в котором размещается элемент управления combobox) перестает быть самым верхним (передним планом?) Окном, приводя к тому, что его рамка рисуется по-другому:

альтернативный текст http://img693.imageshack.us/img693/3474/35148785.png

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

Есть ли другие подводные камни, на которые мне нужно обратить внимание, например, проблемы с фокусом и захватом мыши?

Ответы [ 3 ]

0 голосов
/ 12 апреля 2010

Да, у меня была эта проблема однажды. Быстрый гугл заставляет меня подозревать, что я решил это, используя CreateWindowEx () и указав WS_EX_NOACTIVATE. У меня есть некоторый другой код, который достигает того же эффекта, делая окно с WS_EX_TOOLWINDOW, а не как всплывающее окно, но я не уверен, почему это было сделано таким образом, моя интуиция сказала бы, что сделать его всплывающим окном путь.

0 голосов
/ 02 августа 2018

Вы можете найти в следующих ссылках два примера проекта, которые помещают в раскрывающееся окно CComboBox элементы управления CTreeCtrl или CListCtrl ... аналогично, вы можете поместить туда все, что вам нужно. Вот ссылки:

Дерево ComboBox Control

и

Список ComboBox Control

Надеюсь, это поможет вам.

0 голосов
/ 11 апреля 2010

Когда вы создаете всплывающее окно, вам нужно указать его владельца. Собственные всплывающие окна активируют их владельца, когда вы их активируете. Если вы не укажете владельца, ваше окно активируется, что приведет к смене владельца, которого вы видите.

...