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
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