Привет!
Есть окно приложения, у него нет меню. Окно получает клавиатурный ввод, обрабатывает WM_KEYDOWN/WM_KEYUP, всё хорошо.
Нажимаю F10 — визуально ничего не происходит (меню же нет), но окно переходит в какой-то другой режим и перестаёт получать клавиатурный ввод. Пробовал в WM_KEYDOWN отловить F10 — туда это нажатие просто не доходит.
UPD Такая же фигня происходит, если нажать и отпустить Alt. Мне надо и для него отключить специальное поведение, чтобы все сообщения тупо сыпались в WM_KEYDOWN/WM_KEYUP, без всяких MSG_WM_SYSKEYDOWN/MSG_WM_SYSKEYUP.
Вопрос — кто виноват и что делать?
ЗЫ Пишу на WTL, окно наследуется от CMessageFilter и добавляет себя в обработчики —
pLoop->AddMessageFilter(this);, есть
PreTranslateMessage:
virtual BOOL PreTranslateMessage(MSG* pMsg)
{
if(CFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg))
return TRUE;
return m_view.PreTranslateMessage(pMsg);
}
Совсем отключать PreTranslateMessage — наверное неправильно. Прямо тут проверить, является ли pMsg WM_KEYDOWN/WM_KEYUP и не отправлять в базовый PreTranslateMessage? Или дополнительно проверить на F10? Или что-то ещё?
Тут ещё нюанс — я потом хочу в этом окне диалог показать — не модальный в отдельном окне, а прямо тут, сделав его дочерним. И хочу, чтобы он работал нормально. Из-за моих хаков ничего не сломается для этого случая?