Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сабклассинг ComboBox

1.9K
02 февраля 2007 года
bad_duck
59 / / 29.07.2003
Доброго времени суток!

Данный пост описывает мое решение проблемы. Может кому и пригодиться.

По ходу написания своей жутко крутой программы ;) столкнулся с необходимостью перехватывать нажатия клавиш в комбобоксе (созданном со стилем CBS_DROPDOWN). В частности, неоходимо ослеживать нажатие клавиши Enter при редактировании видимого элемента (т.е. того, который всегда на виду, а не те, что видны в выпадающем списке).

Спасибо уважаемому Matush'у за подсказки по сабклассингу.

Но возникла проблема. Комбобокс не посылает в свою оконную процедуру ни WM_CHAR ни WM_KEYDOWN с WM_KEYUP. Пошарившись в рунете (т.к. с английским я не очень дружу) ничего толкового на эту тему не нашел. Не зная как подойти к решению этой проблемы запустил MSDN и написал в строке поиска "subclassing" (и чего я так сразу не сделал?). Какого же было мое удивление, когда я узнал, что комбобокс не такой простой, каким я представлял его раньше. В нем самом уже используется сабклассинг. То самое окно редактирования с видимым элементом является ничем иным, как обыковенным EditBox'ом. И именно его, EditBox'а, оконную процедуру необходимо переопределять. В MSDN делается это так: создается комбобокс (видимый), с помощью функции ChildWindowFromPoint получается хендл едитбокса, который сидит внутри кобмо, ну и через SetWindowLong переопределяется оконная процедура едита. В ней и идет вся обработка нажатых клавиш.

ЗЫ. Когда создаете комбо, не делайте его размер слишком маленьким (например, если не хотите показывать комбо сразу), и координаты в ChildWindowFromPoint передавайте такие, чтобы они заведомо попадали на комбовский едитбокс.
ЗЗЫ. Побольше читайте MSDN, хоть он и английский :)
355
02 февраля 2007 года
<SCORP>
786 / / 21.10.2006
Цитата: bad_duck
Побольше читайте MSDN, хоть он и английский :)



+100000000!!!!!!!!!!!!!!!!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог