当用户在无模式对话框中按下CTRL+S
时,我想执行一些操作。 加速器是完美的,除了我不能控制线程的消息循环(think插件),所以我不能调用TranslateAccelerator
。
嵌套的消息循环不是一个选项,因为主应用程序在调用PeekMessage
之间做了大量的处理。
CTRL+S
还有其他的方法吗? 我想在WH_GETMESSAGE
上使用Window钩子,在从GetMessage
或PeekMessage
返回之前调用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