音楽再生のコードはあるのですが、動画再生用のサンプルはなかったので(MCIウィンドウのはあったのですが)作ってみました。
ごく初歩的なものですが、使えるのではないでしょうか?
[ここをクリックすると内容が表示されます]
コード: 全て選択
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim vop As MCI_DGV_OPEN_PARMS
Dim vpp AS MCI_DGV_PLAY_PARMS
Dim bErr As Long
' このあたりの事はMCIコマンドについて調べてください。
Type MCI_DGV_OPEN_PARMS
dwCallback As DWord
wDeviceID As DWord
lpstrDeviceType As BytePtr
lpstrElementName As BytePtr
lpstrAlias As BytePtr
dwStyle As DWord
hWndParent As DWord
End Type
TYPE MCI_DGV_PLAY_PARMS
dwCallback As DWord
' dwFrom As DWord
' dwTo As DWord
' dwSpeed As DWord
End Type
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As DWord, dwMsg As DWord, wParam As DWord, lParam As DWord) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd As HWND,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
Dim dwCallback As DWord
' デバイスを閉じる
mciSendCommand(vop.wDeviceID,MCI_CLOSE,MCI_WAIT,dwCallback)
' プロジェクト名に変更してください(私は'Wnd1'にしています)
Wnd1_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_MciNotify(flags As Long, DevID As DWord)
' ここでは再生が正常終了した時にメッセージを受け取っています。
If flags=MCI_NOTIFY_SUCCESSFUL Then
' MCI_CLOSEをMCI_PLAYにすると繰り返し再生になります。
bErr=mciSendCommand(DevID,MCI_CLOSE,MCI_NOTIFY or MCI_FROM,vpp)
End If
End Sub
' 動画オープン・再生ルーチン
Sub PLAY(Name AS BytePtr)
With vop
.dwCallback = hMainWnd As DWord
.lpstrElementName=Name
.dwStyle = WS_CHILD or WS_VISIBLE
.hWndParent = hMainWnd As DWord
End With
' MCIデバイスをオープン
' MCI_DGV_OPEN_WSを付けるとメインウィンドウに除けるとサブウィンドウに表示します。
bErr=mciSendCommand(0,MCI_OPEN, MCI_OPEN_ELEMENT or _
MCI_DGV_OPEN_PARENT or MCI_DGV_OPEN_WS,vop)
If bErr Then
MessageBox(hMainWnd,"デバイスのオープンに失敗","error",MB_OK)
Exit Sub
End If
' 再生
vpp.dwCallback=hMainWnd As DWord
' 再生が終了したときメッセージを送るためMCI_NOTIFYを付けます。
bErr=mciSendCommand(vop.wDeviceID,MCI_PLAY, MCI_NOTIFY ,vpp)
If bErr Then
MessageBox(hMainWnd,"デバイスの再生に失敗","error",MB_OK)
Exit Sub
End If
End Sub
' メニューを作ってください(私は名前をOPENにしています)
Sub MainWnd_IDM_OPEN_MenuClick()
Dim ofn As OPENFILENAME
Dim buffer As String
'ファイル名を取得
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
' ファイルフィルターの指定はここで直接しています。
ofn.lpstrFilter=Ex"Video File (*.avi;*.wmv;*.mpg)\0*.avi;*.wmv;*.mpg\0*\0\0"
ofn.nFilterIndex=1
buffer=ZeroString(MAX_PATH)
ofn.lpstrFile=StrPtr(buffer)
ofn.nMaxFile=MAX_PATH
If GetOpenFileName(ofn)=0 Then Exit Sub
' ここまでは、汎用ルーチン。この下で、グローバル変数に渡すかサブルーチンを呼んでください。
PLAY(ofn.lpstrFile)
End Sub
' メニューを作るのが面倒な方はこちらを使ってください。
/*
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
' 再生するファイルパスを指定
PLAY("C:\動画ファイルパスを指定してください.mpg")
End Sub
*/