在網路上找到的資料或 AI 生成的範例,要真正能夠讓 wxMediaCtrl 動起來的方法都不是很完整,此文沒有高深的技巧,只是在初始建構上做補充。
要讓 wxMediaCtrl 能夠播放有兩點被 AI 忽略,建立時要指定後台播放器;以及要確定 Load 完成,即要捕捉 wxEVT_MEDIA_LOADED 這個事件。
wxMediaCtrl 是 wxWidgets 內建的純功能程式庫,可在背後播放聲音或影片,沒有可視元素的干擾,可以方便設計自己可視架構,例子中有一個註解掉影片載入動作,是用 TestDialog 做布幕,在建構時用 this 指定的,這一個不能指定 NULL,即使只是用來播放音樂。
// 這是一個什麼元件都沒有的 Dialog TestDialog::TestDialog(wxWindow* parent,wxWindowID id) { //(*Initialize(TestDialog) Create(parent, id, _("wxWidgets app"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, _T("id")); //*) // 創建 wxMediaCtrl 對象 m_mediaCtrl = new wxMediaCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, MEDIABACKEND_WMP10);// 在 Windows 要設定這個後台播放器 // 捕捉 wxEVT_MEDIA_LOADED 這個事件,以確定 media 資料已完成載入 m_mediaCtrl->Bind(wxEVT_MEDIA_LOADED,&TestDialog::OnMediaLoaded, this); m_mediaCtrl->Load("example.mid"); //m_mediaCtrl->Load("example.mp4"); // 也可播放影片 } void TestDialog::OnMediaLoaded(const wxMediaEvent& event) { // 已確定 media 資料已完成載入可以 play 了 m_mediaCtrl->Play(); }
沒有留言:
張貼留言