Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перехватить ввод клавиатуры в своем элементе 
V
    Опции темы
sfdev
Дата 30.1.2006, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.1.2006

Репутация: нет
Всего: нет



Проблема: имеется диалоговое приложение. В окне диалога находятся 2 кнопки и один собственный элемент управления на основе CWnd.
Как сделать так, чтобы элемент отлавливал нажатия стрелок на клавиатуре и не переводил фокус ввода на кнопки?

PM MAIL   Вверх
DeadSoul
Дата 31.1.2006, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



WM_CHAR?


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Earnest
Дата 31.1.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



PreTranslateMessage в диалоге, лови WM_KEYDOWN и обрабатывай сам, как тебе надо.


Это сообщение отредактировал(а) Earnest - 31.1.2006, 14:50


--------------------
...
PM   Вверх
sfdev
Дата 31.1.2006, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.1.2006

Репутация: нет
Всего: нет




Возможно, вы меня не совсем поняли. Мне нужно реализовать обработчик в рамках компонента.
Надо чтобы при нажатии стрелки "вверх", к примеру, выдавался MessageBox. Но после этого происходит потеря фокуса (он переходит кнопкам). Как этого избежать?

PM MAIL   Вверх
Dreamer_0x01
Дата 31.1.2006, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



именно так, как писала Earnest. А чтобы перехода не происходило - в этом же обработчике реторнуть FALSE. Обработчик надо писать в том окне, которое "главнее", то есть в том, где располагаются компоненты.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
sfdev
Дата 31.1.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.1.2006

Репутация: нет
Всего: нет



Когда я говорил в рамках компонента, я имел в виду В РАМКАХ КОМПОНЕНТА, а не в рамках более главного окна.
PM MAIL   Вверх
Earnest
Дата 31.1.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Dreamer_0x01
PreTranslateMessage должен возвращать как раз TRUE, чтобы обработка не шла дальше. А на FALSE - будет вызван стандартный обработчик.
Возможно, нужно ловить не WM_KEYDOWN, а WM_KEYUP - многие стандартные действия совершаются по клику, а не нажатию, это каждый раз проверять приходится (или помнить smile )

Так, прочитала еще раз повнимательнее. Компонент - это то custom окно, которое на основе CWnd? Ну можно то же самое, PreTranslate, но уже на уровне этого окна.

Вообще-то сам факт, что у тебя по стрелкам фокус на другие контролы переходит вызывает недоумение: само так не делается, только если они в одной группе. В смысле, на первом по Z-ордеру контроле стоит WS_GROUP, а на следующих нет. Вроде бы так. Убери.




--------------------
...
PM   Вверх
Dreamer_0x01
Дата 31.1.2006, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Цитата(Earnest @ 31.1.2006, 20:30 Найти цитируемый пост)

PreTranslateMessage должен возвращать как раз TRUE, чтобы обработка не шла дальше. А на FALSE - будет вызван стандартный обработчик.


Извиняюсь ;)

А что нужно sfdev, я так и не понял smile


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Earnest
Дата 31.1.2006, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Он хочет, чтобы весь код, отвечающий за поведение его custom окна, был инкапсюлирован в этом классе. Правильно хочет.


--------------------
...
PM   Вверх
sfdev
Дата 31.1.2006, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.1.2006

Репутация: нет
Всего: нет



Спасибо, Earnest.
Действительно, если возвращать TRUE в PreTranslateMessage компонента после обработки, то все работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0622 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.