F10/Alt - как отключить специальное поведение?
От: пффф  
Дата: 05.02.23 09:57
Оценка:
Привет!

Есть окно приложения, у него нет меню. Окно получает клавиатурный ввод, обрабатывает 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? Или что-то ещё?

Тут ещё нюанс — я потом хочу в этом окне диалог показать — не модальный в отдельном окне, а прямо тут, сделав его дочерним. И хочу, чтобы он работал нормально. Из-за моих хаков ничего не сломается для этого случая?
Отредактировано 05.02.2023 10:03 пффф . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.