Это проблема программирования Windows MFC. У меня есть производный CComboBox, который реализует свой собственный выбор и измерение предметов. Я немного улучшил, что ширина раскрывающегося списка настраивается на основе содержимого списка. Я использую SetDroppedWidth в обработчике сообщений OnDropDown, чтобы сделать это. После того, как я вставляю строки и нажимаю на поле со списком, выбранное содержимое строки захватывает всю статическую/область редактирования, а кнопка «drop down» отсутствует. Я мог видеть ширину элемента, который имеет идентификатор элемента -1, изменен/сброшен на новую уменьшенную ширину в методе ItemDraw. Я не думаю, что это правильное поведение. Я хочу, чтобы новая уменьшенная ширина вступала в силу только в элементах списка, идентификатор элемента которого не меньше 0. Любая идея?Выпадающая кнопка MFC ComboBox отсутствует после использования SetDroppedWidth
1
A
ответ
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);
попробуйте вызвать SetDroppedWidth после инициализации элементов списка. Я думаю, что вызов его внутри метода OnDropDown не является правильным местом. – cha
Но таким образом ширина combobox может быть изменена только один раз, потому что инициализация вызывается только один раз. – Buzz