我正在构建一个VST2插件。我想知道何时创建一个插件窗口:加载dll(在我的情况下是InitInstance
),还是其他一些点(也许是AEffEditor::open
)?
我已经隐藏了AEffEditor
。我正在InitInstance
创建一个窗口,并在AEffEditor::open
和AEffEditor::close
中显示和隐藏窗口。
InitInstance
(dll load)似乎不是创建窗口的正确点,但是什么时候?
E.g。主机正在为2个插入实例创建3个窗口(一个在加载dll时)。
另一个问题:何时调用InitInstance
(dll加载)?在主机启动时和每次发送/插入?
我应该为每个dll加载(m_pMainWnd
)创建一个窗口,还是在单独的线程中创建它们并跟踪窗口?即m_pMainWnd
是不同的还是同一个窗口?
答案 0 :(得分:0)
VST编辑器窗口应该嵌入在主机应用程序窗口中。这意味着您需要一个窗口参考(Windows上的HWND,Mac上的带有Carbon的WindowRef或Mac上带有Cocoa的NSView,如果您使用Cockos extensions)到该主机窗口,以便能够创建窗口。
当调用AEffEditor :: open时,VST API仅传递该窗口引用。并且当调用AEffEditor :: close时它变得无效(即使文档对它不是非常具体)。因此,您需要在AEffEditor :: open中创建窗口(作为传递给您的窗口的子窗口)并在AEffEditor :: close中销毁它。
由此可见,您需要为每个插件实例创建一个单独的窗口。用户可以将多个插件实例放在不同的轨道中,并且他/她希望对其中一个实例所做的更改不会影响另一个实例。