2013-03-06 5 views
1

Это проблема программирования Windows MFC. У меня есть производный CComboBox, который реализует свой собственный выбор и измерение предметов. Я немного улучшил, что ширина раскрывающегося списка настраивается на основе содержимого списка. Я использую SetDroppedWidth в обработчике сообщений OnDropDown, чтобы сделать это. После того, как я вставляю строки и нажимаю на поле со списком, выбранное содержимое строки захватывает всю статическую/область редактирования, а кнопка «drop down» отсутствует. Я мог видеть ширину элемента, который имеет идентификатор элемента -1, изменен/сброшен на новую уменьшенную ширину в методе ItemDraw. Я не думаю, что это правильное поведение. Я хочу, чтобы новая уменьшенная ширина вступала в силу только в элементах списка, идентификатор элемента которого не меньше 0. Любая идея?Выпадающая кнопка MFC ComboBox отсутствует после использования SetDroppedWidth

+0

попробуйте вызвать SetDroppedWidth после инициализации элементов списка. Я думаю, что вызов его внутри метода OnDropDown не является правильным местом. – cha

+0

Но таким образом ширина combobox может быть изменена только один раз, потому что инициализация вызывается только один раз. – Buzz

ответ

1

Попытайтесь использовать это.

В обработчике OnDropDown Call CComboBox::GetComboBoxInfo. Он вернет вам указатель на структуру COMBOBOXINFO. Эта структура среди других содержит HWND выпадающего списка hwndList. Используйте API MoveWindow() прямо на этом hwndList и посмотрите, работает ли он

Если это не сработает, попробуйте отправить сообщение CB_SETDROPPEDWIDTH. Как вы знаете, SetDroppedWidth - это просто обертка для сообщения CB_SETDROPPEDWIDTH. Он реализован как вызов SendMessage. Попробуйте следующее:

::PostMessage(m_myComboBox.GetSafeHwnd(), CB_SETDROPPEDWIDTH, nWidth, 0); 
+0

Спасибо! Оно работает. Почему вы выбираете PostMessage, но не SendMessage? – Buzz

+0

Обычно, когда вы отправляете сообщение из обработчика сообщений, это приводит к любым неприятностям. Проводка сообщения просто помещает его в очередь сообщений. – cha