gpt4 book ai didi

c++ - 无模式对话框和加速器

转载 作者:太空宇宙 更新时间:2023-11-04 12:17:16 25 4
gpt4 key购买 nike

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

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

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

我考虑过在 WH_GETMESSAGE 上使用 Window Hook ,它在从 GetMessagePeekMessage 返回之前被调用。但是我不确定在我成功调用 TranslateAcellerator 之后会发生什么,我不能让应用程序知道我处理了它。WH_MSGFILTER 将要求应用程序实现对 CallMsgFilter 的调用,但使用调试器快速浏览时不会出现这种情况。

我最后的想法是将控件子类化,这是我要避免的。这将需要某种机制将按键事件发送到父窗口,我认为这不是一个很好的设计。此外,如果我添加更多控件,我将不得不对每个控件进行子类化。

感谢任何提示。

最佳答案

这是一个相当臭名昭著的互操作问题,它在使用 Winforms 在 native 程序中实现 UI 时也会出现。微软的建议是一个粗略的建议:启动你自己的线程来显示窗口,这样你就可以启动你自己的消息循环。您需要 SetParent() 来避免 Z 顺序问题。可怕的事情,在提交之前请考虑三次模态对话框。

关于c++ - 无模式对话框和加速器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7122756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com