![]() |
|
|
![]()
|
|
| lgv |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
Добрый день, такой вопрос:
создаю в ручную некое окно примерно так m_bwnd = new CBaseWnd; // мой клас наследник CWnd m_bwnd->CreateEx( 0, AfxRegisterWndClass(0), _T("title"), WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, CRect(0, 0, 50, 50), this, NULL, NULL ); теперь нужно, чтобы это окно получало фокус ввода и реагировало не только на мышь но и на нажатие кнопок мыши. Как заставить такое окно реагировать на клавиатурный ввод (предполагаю, что окно должно получить стату контрола, но не уверен)? Спасибо. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Установить фокус - SetFocus(). А чтобы "реагировало" - писать нужно, как именно.
-------------------- ... |
|||
|
||||
| lgv |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
ну, да, фокус окно обрабатывает, если искусственно перевести его ф-цией SetFocus, тогда почему окно молчит на нажатие кнопок? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
А ты ждал, что оно петь тебе будет? У CWnd нет реакции на клавиатуру по-умолчанию. Реакция - это обработка событий + реализация нужного поведения. Сначала определи, что ты хочешь увидеть, потом пропиши это. В зависимости от задачи, лови либо WM_CHAR, либо WM_KEYDOWN\WM_KEYUP.
С мышью аналогично: обрабатывай WM_LBUTTONDOWN, ...UP, ...DBLCLK и т.д. - что нужно. -------------------- ... |
|||
|
||||
| lgv |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
нет, спасибо, петь я сам буду, когда окно будет ловить KEYDOWN в этом и вопрос, почему KEYDOWN не приходит после появления фокуса ввода, а также почему фокус не сходит после табуляции. на другов форуме советовали прикрутить IsDialogMessage в PreTranslateMessage, но пока этот вариант тоже результата не дал. |
|||
|
||||
| GavriKos |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 8.8.2007 Где: Донецк, Украина Репутация: нет Всего: 1 |
Код в студию. по поводу табуляции - окно ловит все сообщения, потом кидает нужные выделенному потомку себя (вроде так).
Тебе нужно чтобы KEYDOWN пришел именно когда фокус появился? --------------------
Донецкая группа IT - присоединяемся |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Давай по порядку.
1) Переход фокуса по табуляции - это вовсе не встроенное поведение. За это обычно отвечает родительский диалог. Если родитель не диалог (CDialog), то это поведение нужно прикрутить, как тебе правильно посоветовали, написав PreTranslateMessage с IsDialogMessage - в родительском окне! А как писать - спиши слова в MFC, можно в диалоге. 2) Обработчик WM_KEYDOWN нужно писать в своем дочернем окне. Если управление туда не приходит, нужно разбираться, почему. И тут есть масса вариантов сделать неправильно: от неправильно встроенного обработчика до перехвата сообщения кем-то еще. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |