gpt4 book ai didi

c++ - WinAPI 窗口消息似乎被插件窃取 - 如何修复?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:29:03 25 4
gpt4 key购买 nike

首先,一些链接(对于那些想自己尝试的人):我正在加载 Proteus VX VST plugin进入我的主机,OpenMPT .该插件工作正常,但它似乎窃取了一些窗口消息,因此单击主机创建的菜单,甚至单击关闭按钮都没有效果。单击关闭按钮甚至不会触发其“按下按钮”动画,因此 Windows 可能不会收到有关窗口操作的任何消息。我知道像 Renoise 这样的其他 VST 主机没有这个问题(点击窗口的关闭按钮在那里工作得很好),所以一定有办法避免这个问题。

我怀疑 Proteus VX 安装了一个不一致的窗口过程,它可能忘记调用 MFC 自己的窗口过程(也可能不调用 DefWindowProc),但我不知道如何找到它,更不用说如何修理它。我尝试在打开插件窗口之前保存原始 GWL_WNDPROC,然后在显示编辑器后立即恢复此过程,但这没有帮助。

编辑: 插件肯定会做一些不可靠的事情;在允许它对我的窗口做任何事情之前,我使用

存储原始的 WindowProc
windowProc = GetWindowLongPtr(m_hWnd, GWL_WNDPROC);

并在插件完成其窗口初始化业务后恢复它

SetWindowLongPtr(m_hWnd, GWL_WNDPROC, windowProc);

这让我可以使用我自己的菜单和窗口的 [x] 按钮,直到我在插件 GUI 中摆弄了一下;我想插件一收到输入焦点就会再次覆盖窗口过程。

最佳答案

以防万一有人遇到这个问题,解决方案是不要将 VST GUI 直接放在我自己的窗口中。相反,我在该窗口中放置了一个静态标签,然后告诉 VST 使用该标签作为父标签。

关于c++ - WinAPI 窗口消息似乎被插件窃取 - 如何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14817446/

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