【发布时间】:2011-08-19 14:05:08
【问题描述】:
当用户在无模式对话框中按下CTRL+S 时,我想执行一些操作。
加速器非常适合这个,除了我无法控制线程的消息循环(想想插件),所以我不能调用TranslateAccelerator。
嵌套消息循环不是一个选项,因为主应用程序在调用 PeekMessage 之间进行了大量处理。
- 有什么方法可以“强制”现有的消息循环来处理我的加速器吗?
- 除了加速器还有其他方法可以捕获
CTRL+S吗?
我考虑过在WH_GETMESSAGE 上使用一个窗口挂钩,它在从GetMessage 或PeekMessage 返回之前被调用。但是我不确定在我成功调用TranslateAcellerator 后会发生什么,我不能让应用程序知道我处理了它。
WH_MSGFILTER 将要求应用程序实现对 CallMsgFilter 的调用,而使用调试器快速浏览它并不会这样做。
我的最后一个想法是将控件子类化,这是我试图避免的。这将需要一些机制来向父窗口发出按键事件信号,我认为这不是一个很好的设计。此外,如果我添加更多控件,我将不得不对每个控件进行子类化。
感谢任何提示。
【问题讨论】:
标签: c++ windows dialog accelerator modeless