Что происходит с приложением по нажатию alt?
От: Went  
Дата: 26.02.20 11:04
Оценка:
Здравствуйте.
В моем WINAPI приложении странно ведет себя клавиша Alt. Если ее нажать (только ее, однократно) то приложение "повисает", то есть перестает крутить цикл сообщений до тех пор, пока я что-то еще не нажму. При этом раздается "дзынь" и приложение "отмерзает". Всегда считал, нажатие Alt приводит к появлению главного меню, но так как меню не определено, то приложение крутит какой-то мертвый цикл во внутренностях WINAPI до тех пор, пока я еще что-то не нажму. Я прав? Это можно как-то отключить штатно?
В принципе, с этим можно жить и я не сильно заморачивался. Но вот новый артефакт. Если я пытаюсь переключить язык ввода и нажимаю у себя Alt+Shift, то изначально ничего не происходит, но если я потом нажимаю однократно Alt, то "дзынь" и язык переключается! Что это за магия? Как все исправить?
Re: Что происходит с приложением по нажатию alt?
От: qaz77  
Дата: 27.02.20 09:01
Оценка: 16 (3)
Здравствуйте, 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?
От: Went  
Дата: 27.02.20 09:42
Оценка:
Здравствуйте, qaz77. Огромное спасибо, много пищи для размышлений )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.