【问题标题】:WinAPI window messages appear to get stolen by plugin - how to fix?WinAPI 窗口消息似乎被插件窃取 - 如何修复?
【发布时间】:2013-02-11 17:26:26
【问题描述】:

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

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

编辑:插件肯定做一些狡猾的事情;在允许它对我的窗口做任何事情之前,我使用存储原始 WindowProc

windowProc = GetWindowLongPtr(m_hWnd, GWL_WNDPROC);

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

SetWindowLongPtr(m_hWnd, GWL_WNDPROC, windowProc);

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

【问题讨论】:

  • 这篇文章真的必须是一个大段吗?
  • 您说“Windows 可能没有收到任何有关窗口操作的消息。”我发现非常不太可能:Windows 是一开始就发送这些消息的。有问题的插件很可能会“吃掉”消息,但您的分析似乎有点不对劲。
  • 这很可能是真的——我不确定如何最好地描述这个问题。我只是希望有人会根据描述知道可能的原因。

标签: c++ winapi mfc vst


【解决方案1】:

以防万一有人偶然发现这一点,解决方案是不要将 VST GUI 放在我自己的窗口中。相反,我在该窗口中放置了一个静态标签,然后告诉 VST 将此标签用作父级。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-18
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2018-06-03
    相关资源
    最近更新 更多