首先,一些链接(对于那些想要自己尝试的人):我正在将Proteus VX VST plugin加载到我的主机OpenMPT中。该插件工作正常,但它似乎窃取了一些窗口消息,以便单击主机创建的菜单,甚至单击关闭按钮无效。单击关闭按钮甚至不会触发其“按钮”动画,因此Windows可能不会收到有关窗口操作的任何消息。我知道像Renoise这样的其他VST主机没有这个问题(单击窗口的关闭按钮就可以正常工作),所以必须有办法避免这种情况。
我怀疑Proteus VX会安装一个不合规的窗口proc,可能会忘记调用MFC自己的窗口proc(也许也不会调用DefWindowProc),但我不知道如何找到它,更不用说如何修理它。我尝试在打开插件窗口之前保存原始GWL_WNDPROC,然后在显示编辑器后立即恢复此proc,但这没有帮助。
编辑:插件必须做一些狡猾的事情;在允许它对我的窗口做任何事情之前,我使用
存储原始的WindowProcwindowProc = GetWindowLongPtr(m_hWnd, GWL_WNDPROC);
并在插件使用
完成窗口初始化业务后恢复它SetWindowLongPtr(m_hWnd, GWL_WNDPROC, windowProc);
这让我可以使用自己的菜单和窗口的[x]按钮,直到我在插件GUI中稍微摆弄一下;我想插件会在收到输入焦点后立即覆盖窗口proc 。
答案 0 :(得分:1)
万一有人磕磕绊绊,解决办法就是不要将VST GUI放在我自己的窗口中。相反,我在该窗口中放置一个静态标签,然后告诉VST将此标签用作父标签。