当用户在无模式对话框中按CTRL+S
时,我想执行一些操作。
加速器对此非常完美,除了我无法控制线程的消息循环(想想插件),所以我无法调用TranslateAccelerator
。
嵌套消息循环不是一个选项,因为主应用程序在对PeekMessage
的调用之间进行了大量处理。
CTRL+S
吗?我考虑在WH_GETMESSAGE
上使用Window挂钩,在从GetMessage
或PeekMessage
返回之前调用它。但是我不确定在成功调用TranslateAcellerator
之后会发生什么,我不能让应用程序知道我处理它。
WH_MSGFILTER
会要求应用程序实现对CallMsgFilter
的调用,而调试者无需快速浏览。
我的最后一个想法是继承控件,这是我想要避免的。这需要一些机制来向父窗口发出按键事件的信号,我认为这不是一个很棒的设计。另外,如果我添加更多控件,我必须将每一个控件子类化。
感谢任何提示。
答案 0 :(得分:1)
这是一个相当臭名昭着的互操作问题,当使用Winforms在本机程序中实现UI时,它也会变得丑陋。微软的推荐是一个粗略的推荐:启动你自己的线程来显示窗口,这样你就可以抽出你自己的消息循环。你需要SetParent()来避免Z顺序问题。可怕的东西,在提交之前要考虑模态对话三次。
答案 1 :(得分:0)
你能使用WM_GETDLGCODE吗? http://msdn.microsoft.com/en-us/library/ms645425(v=vs.85).aspx