【问题标题】:Create a VCL Button Component with sound创建一个有声音的 VCL 按钮组件
【发布时间】:2016-08-26 16:31:20
【问题描述】:

我正在尝试创建一个自定义 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 变量可能是不安全的(?)。

关于在哪里初始化声音的任何指针?

【问题讨论】:

    标签: c++builder vcl


    【解决方案1】:

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

    【讨论】:

    • 工作完美,让一切变得更简单。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多