Resource 文件(以 .rc 作为扩展名)用于描述插件在创建自定义图形界面时所用的资源。 我们可以使用 Visual Studio Editor 工具来便捷地管理 Resource 文件。藉此,可通过将各种小组件拖到模板上来构建 GUI。下面介绍了如何逐步为新的插件创建 Resource 文件。
首先,使用 wp.py 创建新的插件(若对开发工具不熟悉,请参阅 使用开发工具 章节)。
python "%WWISEROOT%/Scripts/Build/Plugins/wp.py" new
对提示作出回应,并在创建插件后将目录改为工程文件夹,然后调用 premake
。
cd MyNewFX
python "%WWISEROOT%/Scripts/Build/Plugins/wp.py" premake Authoring
在 Visual Studio 2019 中打开生成的解决方案文件 (.sln),确保高亮显示工程文件夹(不要与解决方案文件夹混淆,否则 Add New Item
选项会不同),然后在 Project 菜单中选择 Add New Item...
。在对话框窗口中,在左侧列中选择 Resource
,并在中间窗格中选择 Resource File (.rc)
。藉此,可在工程的 WwisePlugin
文件夹中创建名为 Resource.rc
的文件。
在 Resource View 中,右键单击 Resource.rc
文件,并选择 Add Resource
。在 Add Resource
窗口中,选择 Dialog 并单击 New 按钮。
 |
备注: 在创建 DIALOG 窗口时,确保在其 Properties 中设置以下样式:
- Appearance/Border = None
- Appearance/Clip Children = True
- Appearance/Style = Child
- Misc/Control = True
- Misc/Control Parent = True
|
这样应当就可以利用界面左侧的 Toolbox
选项卡将小组件拖放到模板上来构建插件的图形界面了。在保存工程时,将更新 Resource 文件。
若要将 Resource.rc
文件包含在工程中,只需再次调用 premake 即可。这样的话,在下次构建插件时,便会基于 Resource 文件自动生成名为 resource.h
的文件:
python "%WWISEROOT%/Scripts/Build/Plugins/wp.py" build -c Release -x x64_vc160 Authoring
若要告知插件使用自定义界面,则需覆盖 AK::Wwise::IAudioPlugin
所提供的方法。 在 PluginNamePlugin.h
中包含 resource.h
,然后添加方法签名并创建 private 变量来存储窗口句柄。
#pragma once
#include "MyNewFXPlugin.h"
#include "resource.h"
class MyNewFXPlugin final
{
public:
MyNewFXPluginGUI();
~MyNewFXPluginGUI();
HINSTANCE GetResourceHandle() const override;
bool GetDialog(
eDialog in_eDialog,
UINT& out_uiDialogID,
AK::Wwise::PopulateTableItem *& out_pTable
) const override;
bool WindowProc(
eDialog in_eDialog,
HWND in_hWnd,
UINT in_message,
WPARAM in_wParam,
LPARAM in_lParam,
LRESULT & out_lResult
) override;
private:
HWND m_hwndPropView = nullptr;
};
在 PluginNamePlugin.cpp
中,添加对这些方法的实现代码:
#include <afxwin.h>
HINSTANCE MyNewFXPlugin::GetResourceHandle() const
{
AFX_MANAGE_STATE( AfxGetStaticModuleState() );
return AfxGetStaticModuleState()->m_hCurrentResourceHandle;
}
bool MyNewFXPluginGUI::GetDialog( AK::Wwise::Plugin::eDialog in_eDialog, UINT & out_uiDialogID, AK::Wwise::Plugin::PopulateTableItem *& out_pTable ) const
{
AKASSERT( in_eDialog == SettingsDialog );
out_uiDialogID = IDD_DIALOG1;
out_pTable = nullptr;
return true;
}
bool MyNewFXPluginGUI::WindowProc( AK::Wwise::Plugin::eDialog in_eDialog, HWND in_hWnd, UINT in_message, WPARAM in_wParam, LPARAM in_lParam, LRESULT & out_lResult )
{
switch ( in_message )
{
case WM_INITDIALOG:
m_hwndPropView = in_hWnd;
break;
case WM_DESTROY:
break;
}
out_lResult = 0;
return false;
}
最后,将资源文件添加到 PremkaePlugin.lua
:
Plugin.authoring.files =
{
...
"resource.h",
"Resource.rc"
}
重新编译插件并将其加载到 Wwise 工程中。这样应当就可以看到自定义图形界面了。