![]() |
|
|
![]()
|
|
| sfdev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 30.1.2006 Репутация: нет Всего: нет |
Проблема: имеется диалоговое приложение. В окне диалога находятся 2 кнопки и один собственный элемент управления на основе CWnd.
Как сделать так, чтобы элемент отлавливал нажатия стрелок на клавиатуре и не переводил фокус ввода на кнопки? |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
WM_CHAR?
-------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
PreTranslateMessage в диалоге, лови WM_KEYDOWN и обрабатывай сам, как тебе надо.
Это сообщение отредактировал(а) Earnest - 31.1.2006, 14:50 -------------------- ... |
|||
|
||||
| sfdev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 30.1.2006 Репутация: нет Всего: нет |
Возможно, вы меня не совсем поняли. Мне нужно реализовать обработчик в рамках компонента. Надо чтобы при нажатии стрелки "вверх", к примеру, выдавался MessageBox. Но после этого происходит потеря фокуса (он переходит кнопкам). Как этого избежать? |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
именно так, как писала Earnest. А чтобы перехода не происходило - в этом же обработчике реторнуть FALSE. Обработчик надо писать в том окне, которое "главнее", то есть в том, где располагаются компоненты.
-------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| sfdev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 30.1.2006 Репутация: нет Всего: нет |
Когда я говорил в рамках компонента, я имел в виду В РАМКАХ КОМПОНЕНТА, а не в рамках более главного окна.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Dreamer_0x01
PreTranslateMessage должен возвращать как раз TRUE, чтобы обработка не шла дальше. А на FALSE - будет вызван стандартный обработчик. Возможно, нужно ловить не WM_KEYDOWN, а WM_KEYUP - многие стандартные действия совершаются по клику, а не нажатию, это каждый раз проверять приходится (или помнить Так, прочитала еще раз повнимательнее. Компонент - это то custom окно, которое на основе CWnd? Ну можно то же самое, PreTranslate, но уже на уровне этого окна. Вообще-то сам факт, что у тебя по стрелкам фокус на другие контролы переходит вызывает недоумение: само так не делается, только если они в одной группе. В смысле, на первом по Z-ордеру контроле стоит WS_GROUP, а на следующих нет. Вроде бы так. Убери. -------------------- ... |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Извиняюсь ;) А что нужно sfdev, я так и не понял -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Он хочет, чтобы весь код, отвечающий за поведение его custom окна, был инкапсюлирован в этом классе. Правильно хочет.
-------------------- ... |
|||
|
||||
| sfdev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 30.1.2006 Репутация: нет Всего: нет |
Спасибо, Earnest.
Действительно, если возвращать TRUE в PreTranslateMessage компонента после обработки, то все работает. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |