2012-12-28 37 views
1

我正在使用Windows窗體構建一個帶有播放列表的簡單視頻播放器。播放列表是ListBox控件,我使用DirectShow.NET庫在PictureBox控件上播放視頻。如何使Windows窗體控件響應DirectShow消息?

一旦加載到圖片框中的視頻停止播放,我需要我的播放列表進行響應(開始播放下一個視頻)。我知道當媒體完成時,DirectShow發送消息EC_COMPLETE。 (隨着DS.NET庫,這是以通過簡單地稱爲「EventCode.Complete」枚舉)

如何構建觸發,使我的播放列表響應時EC_COMPLETE消息時將觸發一個事件?我一直在重複閱讀MSDN上的事件,委託和事件處理,Stack Overflow以及其他各種在線的地方,但似乎一切都是爲了處理已經內置到.NET中的事件。例如,按鈕點擊等等。

回答

1

DirectShow.NET示例爲您提供瞭如何捕獲和處理EC_COMPLETE的示例。

例如,PlayWnd樣品和\Samples\Players\PlayWnd\MainForm.cs文件:

private void HandleGraphEvent() 
    { 
// ... 
     // Process all queued events 
     while(this.mediaEventEx.GetEvent(out evCode, out evParam1, out evParam2, 0) == 0) 
     { 
// ... 
     if(evCode == EventCode.Complete) 
     { 

的代碼響應於感興趣事件執行。初始化包括向Filter Graph Manager(FGM)提供(其中一種方法)窗口句柄,以便在事件可用時發佈窗口消息。然後,示例中的C#代碼顯示如何通過WndProc來處理它並傳遞到上面引用的片段。

這是整個事件的發佈是如何在FGM啓用:

// Have the graph signal event via window callbacks for performance 
    hr = this.mediaEventEx.SetNotifyWindow(this.Handle, WMGraphNotify, IntPtr.Zero); 
+0

這讓我我需要的東西。謝謝! –