У меня есть подкласс CComboBox
, который ведет себя по-разному в двух разных контекстах - оба в нативном C ++.В рабочем (тестовом) контексте приложение верхнего уровня было создано с использованием VS2008.В нерабочем случае приложение значительно сложнее и, вероятно, изначально было создано более ранней версией VS.
В случае сбоя элемент управления не отображает раскрывающийся список, а реагирует на элементы управления со стрелками вверх / вниз.Также в случае сбоя он всегда возвращает ноль при запросе с использованием GetMinVisible
и всегда возвращает сбой из SetMinVisibleItems
.
Похоже, что проблема связана с определением класса окна COMBOBOX
.Я сбросил данные, возвращенные с ::GetClassInfoEx
в обоих случаях.Помимо адреса wndProc
, есть два отличия.Во-первых, в рабочем случае установлен стиль CS_GLOBALCLASS
, а в случае сбоя - нет.Также в рабочем случае указывается 4 байта дополнительного окна (cbWndExtra
), а в случае сбоя указывается 8 байтов.
Итак, мои вопросы: 1) Какие свойства конфигурации могут повлиять на определение класса окна COMBOBOX
? И 2) Как определить правильный wndProc, если я создаю свой собственный класс окна?
РЕДАКТИРОВАТЬ: поведение раскрывающегося окна меняется в зависимости от спецификации свойства character set
на вкладке свойства General .Он работает, как и ожидалось, если character set
равен unicode
, и не работает, если not set
.Подкласс поля со списком находится в элементе управления ActiveX, но настройка на уровне приложения, похоже, влияет на класс окна, что приводит к путанице в поле со списком в элементе управления ActiveX.Интересно, что есть другие поля со списком, хотя и в диалоговых окнах, в других местах приложения, которые, кажется, ведут себя очень хорошо.