Я хочу выполнить какое-то действие, когда пользователь нажимает CTRL+S
внутри немодального диалога.
Ускорители были бы идеальными для этого, за исключением того, что я не могу контролировать цикл сообщений потока (думаю, плагин), поэтому я не могу вызвать TranslateAccelerator
.
Вложенный цикл обработки сообщений не подходит, поскольку основное приложение выполняет большую обработку между вызовами PeekMessage
.
- Есть ли какой-нибудь способ, которым я могу «заставить» существующий цикл обработки сообщений обработать мой ускоритель?
- Есть ли другой способ, кроме ускорителей, поймать
CTRL+S
?
Я думал об использовании оконных хуков на WH_GETMESSAGE
, который вызывается перед возвратом из GetMessage
или PeekMessage
. Но я не уверен, что произойдет после того, как я успешно позвоню TranslateAcellerator
, я не могу сообщить приложению, что обработал его.
WH_MSGFILTER
потребует, чтобы приложение реализовало вызов CallMsgFilter
, чего с первого взгляда нет с отладчиком.
Моей последней идеей было создание подкласса управления, которого я стараюсь избегать. Это потребовало бы некоторого механизма, чтобы сообщить о событии нажатия клавиши родительскому окну, что я не считаю хорошим дизайном. Кроме того, если я добавлю больше элементов управления, мне придется разделить каждый из них на подклассы.
Спасибо за любые подсказки.