Как вы, возможно, знаете, CComboBox (стиль DropDownList) выбирает только правильно, печатая, если вы не позволяете ему автоматически сортировать его содержимое. Вот пример того, что я имею в виду:
Вы вводите A, а затем B. Если он не находится на автосортировке, он сначала выберет следующую запись, начинающуюся с A, а затем следующую запись, начинающуюся с B. Если она отсортирована, он выберет следующую запись с A, а затем следующую, начинающуюся с AB.
У меня есть класс, который наследуется от CComboBox, и его содержимое не сортируется встроенным механизмом сортировки. Я хотел правильного выбора при наборе текста, поэтому я реализовал это сам. Я выбираю записи с помощью SetCurSel и затем отправляю сообщение CBN_SELCHANGE в родительское окно.
В Windows XP это работало отлично. Сейчас мы используем Windows 7, и сейчас возникает следующая проблема:
Если я использую мышь, чтобы открыть раскрывающийся список, выберите запись, напечатав ее, а затем используйте клавишу «Tab» для перехода к следующему элементу управления, значение, выбранное в начале, будет автоматически выбрано заново.
Если я перезаписываю OnKillFocus и выполняю следующие действия:
int index = GetCurSel();
CComboBox::OnKillFocus();
SetCurSel(index);
это работает в общем, но на мгновение старое выбранное значение все еще вспыхнет, что ужасно.
Если я не вызываю CComboBox :: OnKillFocus (), правильная запись остается выбранной, но поле со списком остается выпадающим.
Итак, моей следующей попыткой было вызвать SetDropDown (FALSE) вручную (и ничего больше в OnKillFocus ()), но затем проблема снова появляется.
Так что я предполагаю, что если вы откроете выпадающий список, текущий выбор будет сохранен внутри. Вызов SetCurSel не обновляет это внутреннее значение. И если вы выделите это внутреннее значение, оно будет снова выбрано.
Любые идеи, как я могу решить эту проблему?