Здравствуйте.
В моем WINAPI приложении странно ведет себя клавиша Alt. Если ее нажать (только ее, однократно) то приложение "повисает", то есть перестает крутить цикл сообщений до тех пор, пока я что-то еще не нажму. При этом раздается "дзынь" и приложение "отмерзает". Всегда считал, нажатие Alt приводит к появлению главного меню, но так как меню не определено, то приложение крутит какой-то мертвый цикл во внутренностях WINAPI до тех пор, пока я еще что-то не нажму. Я прав? Это можно как-то отключить штатно?
В принципе, с этим можно жить и я не сильно заморачивался. Но вот новый артефакт. Если я пытаюсь переключить язык ввода и нажимаю у себя Alt+Shift, то изначально ничего не происходит, но если я потом нажимаю однократно Alt, то "дзынь" и язык переключается! Что это за магия? Как все исправить?
Здравствуйте, Went, Вы писали: W>В моем WINAPI приложении странно ведет себя клавиша Alt. Если ее нажать (только ее, однократно) то приложение "повисает", то есть перестает крутить цикл сообщений до тех пор, пока я что-то еще не нажму. При этом раздается "дзынь" и приложение "отмерзает".
За "дзынь" отвечает дефолтная оконная процедура для сообщений WM_CHAR и WM_SYSCHAR (при нажатом Alt).
WM_SYSCHAR генерирует функция TranslateMessage, вызываемая в цикле сообщений в ответ на WM_SYSKEYDOWN.
Я подозреваю, что обработка, связанная с мнемониками меню сидит внутри TranslateMessage.
Из коробки мнемоники (подчеркнутые буковки) работают только для родных виндовых меню (не owner draw).
Для ручной обработки надо ловить WM_MENUCHAR, что может быть поможет в данном случае.
Вероятно при отсутствии меню как такового там что-то зацикливается...
Переключение языка срабатывает на отпускание либо Alt, либо Shift, т.е. на WM_SYSKEYUP, но до нее не доходит, т.к.
еще из обработки WM_SYSKEYDOWN не вышли.
Re[2]: Что происходит с приложением по нажатию alt?