创建一个带声音的VCL按钮组件

时间:2016-08-26 16:31:21

标签: c++builder vcl

我正在尝试创建一个自定义VCL组件,可以在单击时播放自定义声音。声音是从资源DLL访问的。

问题是,声音是使用Direct X播放的,要创建它需要一个有效的窗口句柄。

我天真的初步测试是在组件构造函数中初始化声音:

__fastcall TArrayBotButton::TArrayBotButton(TComponent* Owner)
    : TBitBtn(Owner),
    FSoundID("BUTTON_CLICK_1")
{
initABCoreLib();
HWND hWnd = Application->MainFormHandle;
mSound.Create(FSoundID.c_str(), hWnd);
}

但上面的方法不起作用,因为此时MainFormHandle为NULL。另外,作为一个组件,使用Application变量在构造函数(?)中可能不安全。

有关初始化声音的位置的指示?

1 个答案:

答案 0 :(得分:2)

为什么不直接使用按钮自己的HWNDTBitBtn是一个窗口控件。它的HWND在构造函数中不可用,但您可以(并且应该)覆盖按钮的虚拟CreateWnd()方法来创建DirectX对象,并覆盖虚拟DestroyWnd()方法以释放它。这样,您还可以在按钮的生命周期内考虑窗口重新创建。