Немодальные диалоги и ускорители - PullRequest
1 голос
/ 19 августа 2011

Я хочу выполнить какое-то действие, когда пользователь нажимает CTRL+S внутри немодального диалога. Ускорители были бы идеальными для этого, за исключением того, что я не могу контролировать цикл сообщений потока (думаю, плагин), поэтому я не могу вызвать TranslateAccelerator.

Вложенный цикл обработки сообщений не подходит, поскольку основное приложение выполняет большую обработку между вызовами PeekMessage.

  • Есть ли какой-нибудь способ, которым я могу «заставить» существующий цикл обработки сообщений обработать мой ускоритель?
  • Есть ли другой способ, кроме ускорителей, поймать CTRL+S?

Я думал об использовании оконных хуков на WH_GETMESSAGE, который вызывается перед возвратом из GetMessage или PeekMessage. Но я не уверен, что произойдет после того, как я успешно позвоню TranslateAcellerator, я не могу сообщить приложению, что обработал его. WH_MSGFILTER потребует, чтобы приложение реализовало вызов CallMsgFilter, чего с первого взгляда нет с отладчиком.

Моей последней идеей было создание подкласса управления, которого я стараюсь избегать. Это потребовало бы некоторого механизма, чтобы сообщить о событии нажатия клавиши родительскому окну, что я не считаю хорошим дизайном. Кроме того, если я добавлю больше элементов управления, мне придется разделить каждый из них на подклассы.

Спасибо за любые подсказки.

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Это довольно печально известная проблема взаимодействия, она поднимает свою уродливую голову и при использовании Winforms для реализации пользовательского интерфейса в нативной программе. Рекомендация Microsoft - грубая: начните свой собственный поток, чтобы отобразить окно, чтобы вы могли прокачать свой собственный цикл сообщений. Вам потребуется SetParent (), чтобы избежать проблем Z-порядка. Страшные вещи, рассмотрите модальный диалог трижды, прежде чем совершать это.

0 голосов
/ 19 августа 2011

Можете ли вы использовать WM_GETDLGCODE? http://msdn.microsoft.com/en-us/library/ms645425(v=vs.85).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...