人気ブログランキング | 話題のタグを見る
DirectShow(VB.NET)で描画時にユーザイベントを取得する方法
Panelコントロール内部で動画再生を行うコードをActiveMovie control type livraryを使って書いてますが、ユーザのマウスイベントとかが取得できなかった(Panelのイベントとして)でその方法を調べてみました。
-------------------------------------

'グラフマネージャの作成
Dim m_Grp As FilgraphManager = New FilgraphManager
m_Grp.RenderFile(m_strFilePath)

'IVideoWindowインターフェース取得
Dim VideoWindow As IVideoWindow = Nothing
VideoWindow = TryCast(m_Grp, IVideoWindow)

'描画領域のイベントをコントロールに渡す
VideoWindow.MessageDrain = CInt(Me.Handle)

-------------------------------------

上のコードをPanelを継承したカスタムコントロール内に書けばOKみたいです。
特に
VideoWindow.MessageDrain = CInt(Me.Handle)
が肝です。
これで、VideoWindowがとらえたイベントを指定したハンドルを持つコントロールに渡すことができるようです。

このカスタムコントロールをフォームにデザイナで配置して、下記のようにすれば正しくイベントを拾えました。
-------------------------------------

Private Sub mlt_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Handles mlt.MouseDown
MsgBox("クリックされました。")
End Sub

-------------------------------------

なお、IVideoWindowで拾い、渡せるWin32メッセージは(IVideoWindow::put_MessageDrainと同じであれば)下記の分だけ出そうです。
参照:IVideoWindow::put_MessageDrain
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/htm/ivideowindowput_messagedrain.asp

-------------------------------------
WM_CHAR
WM_DEADCHAR
WM_KEYDOWN
WM_KEYUP
WM_LBUTTONDBLCLK
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_MBUTTONDBLCLK
WM_MBUTTONDOWN
WM_MBUTTONUP
WM_MOUSEACTIVATE
WM_MOUSEMOVE
WM_NCLBUTTONDBLCLK
WM_NCLBUTTONDOWN
WM_NCLBUTTONUP
WM_NCMBUTTONDBLCLK
WM_NCMBUTTONDOWN
WM_NCMBUTTONUP
WM_NCMOUSEMOVE
WM_NCRBUTTONDBLCLK
WM_NCRBUTTONDOWN
WM_NCRBUTTONUP
WM_RBUTTONDBLCLK
WM_RBUTTONDOWN
WM_RBUTTONUP
WM_SYSCHAR
WM_SYSDEADCHAR
WM_SYSKEYDOWN
WM_SYSKEYUP

-------------------------------------
by jehoshaphat | 2008-04-04 13:44 | .Net開発


<< [vb.net]あるオブジェク... exeと別フォルダのDLLを参... >>