2

首先,一些链接(对于那些想自己尝试的人):我正在将Proteus VX VST 插件加载到我的主机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 中摆弄一下;我想插件一旦收到输入焦点就会再次覆盖窗口进程。

4

1 回答 1

1

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

于 2013-12-21T22:00:30.700 回答