无模式对话框和加速器

当用户在无模式对话框中按下CTRL+S时,我想执行一些操作。 加速器是完美的,除了我不能控制线程的消息循环(think插件),所以我不能调用TranslateAccelerator

嵌套的消息循环不是一个选项,因为主应用程序在调用PeekMessage之间做了大量的处理。

  • 有什么方法可以“强制”现有的消息循环来处理我的加速器?
  • 除了加速器来捕捉CTRL+S还有其他的方法吗?

我想在WH_GETMESSAGE上使用Window钩子,在从GetMessagePeekMessage返回之前调用WH_GETMESSAGE 。 但我不确定在成功调用TranslateAcellerator之后会发生什么,我不能让应用程序知道我处理了它。 WH_MSGFILTER将要求应用程序实现对CallMsgFilter的调用,而不是用debugging器快速浏览一下。

我最后的想法是控制这是我试图避免。 这将需要一些机制来向父窗口发出按键事件的信号,我不认为这是一个伟大的devise。 另外,如果我添加更多的控件,我将不得不inheritance每一个。

感谢任何提示。

这是一个相当臭名昭着的互操作性问题,当使用Winforms在本地程序中实现UI时,也会遇到丑陋的头脑。 微软的建议是粗略的:建立自己的线程来显示窗口,这样你就可以抽取自己的消息循环。 你需要SetParent()来避免Z-order问题。 可怕的东西,做这个之前考虑三次模态对话。

你可以使用WM_GETDLGCODE吗? http://msdn.microsoft.com/en-us/library/ms645425(v=vs.85).aspx