ムービー ファイル再生用のウィンドウ

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

ムービー ファイル再生用のウィンドウ

#1 投稿記事 by M.S. »

皆さんお久しぶりです、M.S. です。

現在、Audio CD と Audio / Video File の再生ができる、プレイヤーを作っているのですが、
MPEG や WMV、AVI などのファイルを再生する際、映像を表示するウィンドウを表示させたいのですが、
やり方がどうしてもわからないので、教えて下さい。

*映像を表示するウィンドウは、それぞれの映像のサイズに大きさが変わるうウィンドウにしたいのです。

お願いします。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

それの半分なら説明できます。

#2 投稿記事 by konisi »

まだまだオブジェクト系について初心者ですが、もし再生する動画ファイルの画面の大きさが分かるのでしたら、SetWindowPos関数(ヘルプファイル内のWin32API_ウインドウ_ウインドウに詳細有。)を使用するといいかと思われます。

基本的な使用方法
絵画先のハンドルがhSubWndで動画の画面の大きさがそれぞれMx,Myの場合

コード: 全て選択


SetWindowPos(hSubWnd,NULL,0,0,Mx,My,SWP_NOMOVE or SWP_SHOWWINDOW)
すみませんが僕にはそれ以外の事とそれ以上の事は分かりません。健闘を祈ります。
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

#3 投稿記事 by M.S. »

言葉足らずでした、すいません・・・・・・。

映像を表示させるのは、「hMainWnd」ではなく、別のウィンドウです。

そしてウィンドウは、Win32 プログラミング講座の「ビットマップビューア」みたいに、
ファイルによってウィンドウの大きさが変わるようにしたいのです。
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

#4 投稿記事 by NoWest »

M.S. さんが書きました:> 言葉足らずでした、すいません・・・・・・。
>
> 映像を表示させるのは、「hMainWnd」ではなく、別のウィンドウです。
>
> そしてウィンドウは、Win32 プログラミング講座の「ビットマップビューア」みたいに、
> ファイルによってウィンドウの大きさが変わるようにしたいのです。
開発にはmciSendCommand、mciSendString、MCIWndのうち
どれを使っているのですか?

それによってもかなり違ってきますが。。。
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

#5 投稿記事 by M.S. »

> 開発にはmciSendCommand、mciSendString、MCIWndのうち
> どれを使っているのですか?
>
> それによってもかなり違ってきますが。。。

mciSendCommand です。
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

#6 投稿記事 by M.S. »

現在の途中のコードはこんなんです。

コード: 全て選択


'-----------------------------------------------------------------------------
'  イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
'CD Player,MCI Audio==================================================
Const ID_TIMER = 100

'MCI_OPEN_PARMS構造体。MCIデバイスのオープンに関する情報が格納される
Dim mop As MCI_OPEN_PARMS

'現在演奏中のトラック番号(1,2,3,...)が格納される
Dim TrackNum As Long


Function OpenMciDevice() As Long
    'MCIデバイスをオープンする
    '(mop.wDeviceIDにデバイスIDが格納される)

    Dim dwError As DWord
    Dim buffer[255] As Byte

    mop.dwCallback=hMainWnd
    mop.lpstrDeviceType="cdaudio"
    dwError=mciSendCommand(0,MCI_OPEN,MCI_WAIT or MCI_OPEN_TYPE,mop)
    If dwError Then
        mciGetErrorString(dwError,buffer,255)
        MessageBox(hMainWnd,buffer,"Missed to open of device.",MB_OK)
        OpenMciDevice=0
    Else
        OpenMciDevice=1
    End If
End Function

Sub CloseMciDevice()
    'MCIデバイスを閉じる
    Dim dwDummy As DWord
    mciSendCommand(mop.wDeviceID,MCI_CLOSE,MCI_WAIT,dwDummy)
    mop.wDeviceID=0
End Sub

Sub GetTrackInfo()
    Dim dwError As DWord
    Dim buffer[255] As Byte
    Dim NumberOfTracks As Long

    If mop.wDeviceID Then
        '再生中のときは停止
        SendMessage(hMainWnd,WM_COMMAND,CDStopButton,0)
    End If

    'MCIデバイスをオープン
    If OpenMciDevice()=0 Then Exit Sub

    'トラック数を取得(取得したトラック数はNumberOfTracks変数にコピーする)
    Dim msp As MCI_STATUS_PARMS
    msp.dwItem=MCI_STATUS_NUMBER_OF_TRACKS
    dwError=mciSendCommand(mop.wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,msp)
    If dwError Then
        mciGetErrorString(dwError,buffer,255)
        MessageBox(hMainWnd,buffer,"Missed to get of tracks info.",MB_OK)

        'MCIデバイスを閉じる
        CloseMciDevice()
        Exit Sub
    End If
    NumberOfTracks=msp.dwReturn


    '--------------------------------------
    ' リストボックスにトラック情報をセット
    '--------------------------------------
    Dim i As Long
    Dim hList As DWord
    hList=GetDlgItem(hMainWnd,TrackList)

    '時刻形式にMFSを指定
    Dim msep As MCI_SET_PARMS
    msep.dwTimeFormat = MCI_FORMAT_MSF
    mciSendCommand(mop.wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,msep)

    'リストボックスの内容をリセット
    SendMessage(hList,LB_RESETCONTENT,0,0)

    For i=1 To NumberOfTracks
        'トラック情報を取得する
        msp.dwItem=MCI_STATUS_LENGTH
        msp.dwTrack=i
        mciSendCommand(mop.wDeviceID,MCI_STATUS,MCI_STATUS_ITEM or MCI_TRACK,msp)

        'トラック情報を文字列に変換
        wsprintf(buffer,"Track%02d - %02d:%02d",i,MCI_MSF_MINUTE(msp.dwReturn),MCI_MSF_SECOND(msp.dwReturn))

        'リストボックスに追加
        SendMessage(hList,LB_ADDSTRING,0,buffer)
    Next


    'MCIデバイスを閉じる
    CloseMciDevice()

    '再生ボタンを有効化し、一時停止・停止ボタンを無効化する
    EnableWindow(GetDlgItem(hMainWnd,CDPlayButton),1)
    EnableWindow(GetDlgItem(hMainWnd,CDPauseButton),0)
    EnableWindow(GetDlgItem(hMainWnd,CDStopButton),0)
End Sub
'=====================================================================

Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (lpstrCommand As BytePtr,lpstrReturnString As BytePtr,uReturnLength As DWord,hwndCallback As DWord) As DWord

declare function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes as VoidPtr, bInitialOwner as long, lpName as String) as long

declare function timeSetEvent Lib "winmm" (uDelay as DWord,uResolution as DWord,lpTimeProc as DWord,dwUser as DWordPtr,fuEvent as DWord) as DWord
declare function timeKillEvent Lib "winmm" (uTimerID as DWord) as DWord
dim uTimer as DWord

'SetWndCenter Function================================================
function SetWndCenter(hWnd as long,ByRef cpos as POINTAPI) as long
	dim AppWnd as RECT
	dim width as long,hight as long

	GetWindowRect(hWnd,AppWnd)

	with AppWnd
		width=(.right - .left)
		hight=(.bottom - .top)

		.left=cpos.x - width/2
		.top=cpos.y - hight/2

		if .left<0 then .left=0
		if .top<0 then .top=0

		SetWndCenter=MoveWindow(hWnd,.left,.top,width,hight,TRUE)
	End With
End Function
dim DeskTopCenter as POINTAPI
'=====================================================================

'Status Bar===========================================================
const ID_STATUS = 70
dim hStatusWnd as DWord
'=====================================================================

'MCI Video============================================================
Dim vop As MCI_DGV_OPEN_PARMS
Dim vpp AS MCI_DGV_PLAY_PARMS
Dim msp As MCI_SEEK_PARMS
Dim buffer[100] As Byte
Dim bErr As Long
Dim d As Long
d=0

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: この位置にウィンドウメッセージを処理するためのコードを記述します。
	dim mmi as *MINMAXINFO
	
	select case dwMsg
		case WM_GETMINMAXINFO
			mmi=lParam
			mmi->ptMinTrackSize.x=408
			mmi->ptMinTrackSize.y=440
			mmi->ptMaxTrackSize.x=408
			mmi->ptMaxTrackSize.y=440
	End Select
	' イベントプロシージャの呼び出しを行います。
	MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function

function TimeProc(uID as DWord,uMsg as DWord,dwUser as DWord,dw1 as DWord,dw2 as DWord) as DWord
	uTimerID=timeSetEvent(100,0,AddressOf(TimeProc),0,1)

	timeKillEvent(uTimerID)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub MainWnd_Destroy()
	dim IsTopMost as long
	if SendMessage(GetDlgItem(hMainWnd,CheckBox1),BM_GETCHECK,0,0) then
		IsTopMost=1
	Else
		IsTopMost=0
	End If
	
	MCIPlayer_DestroyObjects()
	PostQuitMessage(0)
End Sub

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
    GetTrackInfo()


	Dim rect As RECT

	SystemParametersInfo(SPI_GETWORKAREA,0,VarPtr(rect),0)

	With DeskTopCenter
		.x = (rect.left + rect.right)/2
		.y = (rect.top + rect.bottom)/2
			Dim buf As String
			buf=ZeroString(40)
			wsprintf(buf,"xc=%4d, yc=%4d", .x, .y)
	End With

	If SetWndCenter(hMainWnd, DeskTopCenter) = FALSE Then
		MessageBox(hMainWnd,"Missed to move.","erorr",MB_OK)
	End If

	dim IsTopMost as long
	
	if IsTopMost then
		SendDlgItemMessage(hMainWnd,CheckBox1,BM_SETCHECK,BST_CHECKED,0)
		SetWindowPos(hMainWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE)
	End If


	dim ic as INITCOMMONCONTROLSEX
	dim Statusbar_Sizes[1] as long

	ic.dwSize=Len(ic)
	ic.dwICC=ICC_BAR_CLASSES
	InitCommonControlsEx(ic)

	hStatusWnd=CreateStatusWindow(WS_CHILD or WS_VISIBLE or CCS_BOTTOM,_
								  NULL,hMainWnd,ID_STATUS)

	Statusbar_Sizes[0]=204
	Statusbar_Sizes[1]=408
	SendMessage(hStatusWnd,SB_SETPARTS,2,Statusbar_Sizes)

	SetTimer(hMainWnd,0,100,NULL)
End Sub

Sub MainWnd_ReloadButton_Click()
    GetTrackInfo()

	SetWindowText(hMainWnd,"MCI Audio Player")
End Sub

Sub MainWnd_EjectButton_Click()
    If mop.wDeviceID Then
        SendMessage(hMainWnd,WM_COMMAND,CDStopButton,0)
    End If

    If OpenMciDevice()=0 Then Exit Sub

    mciSendCommand(mop.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, ByVal NULL)

    CloseMciDevice()

    EnableWindow(GetDlgItem(hMainWnd,CDPlayButton),0)
    EnableWindow(GetDlgItem(hMainWnd,CDPauseButton),0)
    EnableWindow(GetDlgItem(hMainWnd,CDStopButton),0)
End Sub

Sub MainWnd_CDPlayButton_Click()
	SetWindowText(hMainWnd,"You pushed play button of Audio CD.")

    Dim dwError As DWord
    Dim buffer[255] As Byte
    Dim msep As MCI_SET_PARMS
    Dim mpp As MCI_PLAY_PARMS
    Dim dwParms As DWord

    If mop.wDeviceID=0 Then

        TrackNum=SendDlgItemMessage(hMainWnd,TrackList,LB_GETCURSEL,0,0)
        If TrackNum=LB_ERR Then Exit Sub
   	    TrackNum=TrackNum+1

        If OpenMciDevice()=0 Then Exit Sub

        msep.dwTimeFormat = MCI_FORMAT_MSF
        mciSendCommand(mop.wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,msep)

        Dim msp As MCI_STATUS_PARMS
        msp.dwItem=MCI_STATUS_LENGTH
        msp.dwTrack=TrackNum
        mciSendCommand(mop.wDeviceID,MCI_STATUS,MCI_STATUS_ITEM or MCI_TRACK,msp)

        Dim nMax As Integer
        Dim hTrackBar As DWord
        hTrackBar=GetDlgItem(hMainWnd,TrackBar1)
        nMax=(MCI_MSF_MINUTE(msp.dwReturn)*60 + MCI_MSF_SECOND(msp.dwReturn)) * 10
        SendMessage(hTrackBar,TBM_SETRANGE,0,MAKELONG(0,nMax))
        SendMessage(hTrackBar,TBM_SETPOS,1,0)


        msep.dwTimeFormat = MCI_FORMAT_TMSF
        mciSendCommand(mop.wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,msep)

		mpp.dwCallback=hMainWnd
        mpp.dwFrom=MCI_MAKE_TMSF(TrackNum,0,0,0)
        if TrackNum=SendDlgItemMessage(hMainWnd,TrackList,LB_GETCOUNT,0,0) then
            dwParms=MCI_FROM or MCI_NOTIFY

			dim ReturnString[1024] As Byte

			mciSendString("open cdaudio alias cda",ReturnString,1024,NULL)
			mciSendString("set cda time format tmsf",ReturnString,1024,NULL)
			mciSendString("play cda from SelectedTrack to LastTrack",ReturnString,1024,NULL)
		Else
	     	mpp.dwTo=MCI_MAKE_TMSF(TrackNum+1,0,0,0)
            dwParms=MCI_FROM or MCI_TO or MCI_NOTIFY

			mciSendString("stop cda",ReturnString,1024,NULL)
			mciSendString("close cda",ReturnString,1024,NULL)
        End If

	    dwError=mciSendCommand(mop.wDeviceID,MCI_PLAY,dwParms,mpp)
    Else

        mpp.dwCallback=hMainWnd
        If TrackNum=SendDlgItemMessage(hMainWnd,TrackList,LB_GETCOUNT,0,0) Then
            dwParms=MCI_NOTIFY
        Else
            mpp.dwTo=MCI_MAKE_TMSF(TrackNum+1,0,0,0)
            dwParms=MCI_TO or MCI_NOTIFY
        End If
        dwError=mciSendCommand(mop.wDeviceID,MCI_PLAY,dwParms,mpp)
    End If

    If dwError Then
        mciGetErrorString(dwError,buffer,255)
        MessageBox(hMainWnd,buffer,"Missed to play of device.",MB_OK)

        CloseMciDevice()
        Exit Sub
    End If

    EnableWindow(GetDlgItem(hMainWnd,CDPlayButton),0)
    EnableWindow(GetDlgItem(hMainWnd,CDPauseButton),1)
    EnableWindow(GetDlgItem(hMainWnd,CDStopButton),1)

    SetTimer(hMainWnd,ID_TIMER,100,0)

	SetWindowText(hMainWnd,"MCI Audio Player")
End Sub

Sub MainWnd_CDPauseButton_Click()
    mciSendCommand(mop.wDeviceID,MCI_PAUSE,0,ByVal 0)

    EnableWindow(GetDlgItem(hMainWnd,CDPlayButton),1)
    EnableWindow(GetDlgItem(hMainWnd,CDPauseButton),0)
    EnableWindow(GetDlgItem(hMainWnd,CDStopButton),1)

	SetWindowText(hMainWnd,"Audio CD is pausing now.")

    KillTimer(hMainWnd,ID_TIMER)
End Sub

Sub MainWnd_CDStopButton_Click()
	SetWindowText(hMainWnd,"You pushed stop button of Audio CD")

    Dim bErr As Long
    Dim dwCallback As DWord

    bErr=mciSendCommand(mop.wDeviceID,MCI_STOP,MCI_WAIT,dwCallback)
    If bErr Then
        MessageBox(hMainWnd,"Missed to stop of device.","error",MB_OK)
        Exit Sub
    End If

    CloseMciDevice()

    EnableWindow(GetDlgItem(hMainWnd,CDPlayButton),1)
    EnableWindow(GetDlgItem(hMainWnd,CDPauseButton),0)
    EnableWindow(GetDlgItem(hMainWnd,CDStopButton),0)

    KillTimer(hMainWnd,ID_TIMER)

    SendMessage(GetDlgItem(hMainWnd,TrackBar1),TBM_SETPOS,1,0)

	SetWindowText(hMainWnd,"MCI Audio Player")
End Sub

Sub MainWnd_MciNotify(flags As Long, DevID As Long)
    If flags=MCI_NOTIFY_SUCCESSFUL Then
        SendMessage(hMainWnd,WM_COMMAND,CDStopButton,0)
    End If

    Dim dwCallback As DWord


    If flags=MCI_NOTIFY_SUCCESSFUL Then
        mciSendCommand(DevID,MCI_CLOSE,MCI_WAIT,dwCallback)

        mop.wDeviceID=0
	End If
End Sub

Sub MainWnd_HScroll(nScrollCode As Long, nPos As Integer, hwndScrollBar As Long)
    Dim sw As Long

    If mop.wDeviceID<>0 and _
        hwndScrollBar=GetDlgItem(hMainWnd,TrackBar1) and _
        (nScrollCode=SB_ENDSCROLL or _
        nScrollCode=SB_LEFT or _
        nScrollCode=SB_RIGHT or _
        nScrollCode=SB_LINELEFT or _
        nScrollCode=SB_LINERIGHT or _
        nScrollCode=SB_PAGELEFT or _
        nScrollCode=SB_PAGERIGHT or _
        nScrollCode=SB_THUMBPOSITION)Then

        If IsWindowEnabled(GetDlgItem(hMainWnd,CDPlayButton))=0 Then
            SendMessage(hMainWnd,WM_COMMAND,CDPauseButton,0)

            sw=1
        Else
            sw=0
        End If

        Dim msep As MCI_SET_PARMS
        msep.dwTimeFormat = MCI_FORMAT_TMSF
        mciSendCommand(mop.wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,msep)

        Dim bErr As Long
        Dim mciSeekParms As MCI_SEEK_PARMS
        Dim pos As Long
        pos=SendMessage(GetDlgItem(hMainWnd,TrackBar1),TBM_GETPOS,0,0)\10
        mciSeekParms.dwTo=MCI_MAKE_TMSF(TrackNum, pos\60, pos mod 60,0)
        bErr=mciSendCommand(mop.wDeviceID,MCI_SEEK,MCI_TO,mciSeekParms)
        If bErr Then
            MessageBox(hMainWnd,"Missed to seek.","error",MB_OK)
            Exit Sub
        End If

        If sw Then
            SendMessage(hMainWnd,WM_COMMAND,CDPlayButton,0)
        End If
    End If
End Sub

Sub MainWnd_Timer(TimerID As Long)
    Dim hTrackBar As DWord
    Dim pos As Long

    If TimerID=ID_TIMER Then
        hTrackBar=GetDlgItem(hMainWnd,TrackBar1)

        pos=SendMessage(hTrackBar,TBM_GETPOS,0,0)
        pos=pos+1
        SendMessage(hTrackBar,TBM_SETPOS,1,pos)
    End If


	dim buffer[225] as Byte
	dim template[225] as Byte

	GetDateFormat(LOCALE_USER_DEFAULT,DATE_LONGDATE,ByVal 0,0,buffer,225)
	SendMessage(hStatusWnd,SB_SETTEXT,0,buffer)

	lstrcpy(template,"HH : mm : ss")
	GetTimeFormat(LOCALE_USER_DEFAULT,NULL,ByVal 0,template,buffer,225)
	SendMessage(hStatusWnd,SB_SETTEXT,1,buffer)
End Sub

Sub MainWnd_OpenButton_Click()
	dim ofn as OPENFILENAME
	dim buffer[MAX_PATH-1] as Byte
	dim hFile as long
	dim dwFileSize as DWord
	dim dwAccessByte as DWord

	ofn.lStructSize=76
	ofn.hwndOwner=hMainWnd
	ofn.lpstrFilter=Ex"Wave Sound (*.wav)\0*.wav\0Windows Media Audio (*.wma)\0*.wma\0MPEG audio layer 3 (*.mp3)\0*.mp3\0MIDI Sequence (*.mid)\0*.mid\0ビデオファイル(*.avi;*.wmv;*.mpg)\0*.avi;*.wmv;*.mpg\0All Files (*.*)\0*\0\0"
	ofn.nFilterIndex=1
	ofn.nMaxFile=MAX_PATH
	ofn.lpstrFile=buffer
	GetOpenFileName(ofn)

	SetWindowText(GetDlgItem(hMainWnd,PathBox),ofn.lpstrFile)


	With vop
		.dwCallback = hVideoPlayer
		.lpstrElementName=buffer
		.dwStyle = WS_CHILD
		.hWndParent = hMainWnd
	End With
	bErr = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT or _
	MCI_DGV_OPEN_PARENT or MCI_DGV_OPEN_WS, vop)
End Sub

Sub MainWnd_ResetButton_Click()
	dim hEdit as long
	dim buf as String

	hEdit=GetDlgItem(hMainWnd,PathBox)

	SetWindowText(hEdit,"")

	SetWindowText(hMainWnd,"MCI Audio Player")
End Sub

Sub MainWnd_MCIPlayButton_Click()
	SetWindowText(hMainWnd,"You pushed play button of MCI")

    Dim bErr As Long
    Dim mpp As MCI_PLAY_PARMS
    Dim buffer[MAX_PATH-1] As Byte

    If mop.wDeviceID Then MainWnd_MCIStopButton_Click()

    mop.lpstrElementName=buffer
    GetWindowText(GetDlgItem(hMainWnd,PathBox),mop.lpstrElementName,260)

    mop.dwCallback=hMainWnd

    bErr=mciSendCommand(0,MCI_OPEN,MCI_OPEN_ELEMENT,mop)
    If bErr Then
       	MessageBox(hMainWnd,"Missed to open of device.","error",MB_OK)
		Exit Sub
    End If

    if mpp.dwCallback=hMainWnd then

    bErr=mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_NOTIFY,mpp)

	Else
'MCI Video============================================================
	msp.dwTo=0
	bErr = mciSendCommand(vop.wDeviceID,MCI_PLAY,0,vpp)
	dim ret as long
	ret=DialogBox(hMainWnd,"VideoPlayer")
'=====================================================================
	End If

    If bErr Then
        MessageBox(hMainWnd,"Missed to play of device.","error",MB_OK)
        Exit Sub
    End If

'MCI Video============================================================
	InvalidateRect(hMainWnd,ByVal 0,0)
'=====================================================================

	SetWindowText(hMainWnd,"MCI Audio Player")
End Sub

Sub MainWnd_MCIStopButton_Click()
	SetWindowText(hMainWnd,"You pushed stop button of MCI")

    Dim bErr As Long
    Dim dwCallback As DWord

    bErr=mciSendCommand(mop.wDeviceID,MCI_STOP,MCI_WAIT,dwCallback)
    If bErr Then
        MessageBox(hMainWnd,"Missed to stop of device.","error",MB_OK)
        Exit Sub
    End If

    mciSendCommand(mop.wDeviceID,MCI_CLOSE,MCI_WAIT,dwCallback)

    mop.wDeviceID=0

	bErr=mciSendCommand(vop.wDeviceID,MCI_STOP,0,d) 

	SetWindowText(hMainWnd,"MCI Audio Player")
End Sub

Sub MainWnd_IDM_CDPLAY_MenuClick()
	MainWnd_CDPlayButton_Click()
End Sub

Sub MainWnd_IDM_CDPAUSE_MenuClick()
	MainWnd_CDPauseButton_Click()
End Sub

Sub MainWnd_IDM_CDSTOP_MenuClick()
	MainWnd_CDStopButton_Click()
End Sub

Sub MainWnd_IDM_MCIPLAY_MenuClick()
	MainWnd_MCIPlayButton_Click()
End Sub

Sub MainWnd_IDM_MCISTOP_MenuClick()
	MainWnd_MCIStopButton_Click()
End Sub

Sub MainWnd_IDM_ABOUT_MenuClick()
	ShellAbout(hMainWnd,"MCI Player  Ver4.00","Masaki Sanjo (M.S.)",LoadIcon(GetModuleHandle(0),101))
End Sub

Sub MainWnd_IDM_EJECT_MenuClick()
	MainWnd_EjectButton_Click()
End Sub

Sub MainWnd_IDM_OPEN_MenuClick()
	MainWnd_OpenButton_Click()
End Sub

Sub MainWnd_IDM_RESET_MenuClick()
	MainWnd_ResetButton_Click()
End Sub

Sub MainWnd_IDM_EXIT_MenuClick()
	SendMessage(hMainWnd,WM_CLOSE,0,0)
End Sub

Sub MainWnd_IDM_RELOAD_MenuClick()
	MainWnd_ReloadButton_Click()
End Sub

CreateMutex(0,0,"MCI Audio Player")
if GetLastError()=183 then
	MsgBox 0,"This program can not start up double.","error",MB_ICONEXCLAMATION
	End
End If
Sub MainWnd_IDM_READMEE_MenuClick()
	Exec "ReadMe_E.txt"
End Sub

Sub MainWnd_IDM_READMEJ_MenuClick()
	exec "ReadMe_J.txt"
End Sub

Sub MainWnd_KeyDown(KeyCode As Long, flags As Long)
	select case KeyCode		
		CASE VK_F1:
			MainWnd_ReloadButton_Click()
		CASE VK_F3:
			MainWnd_EjectButton_Click()
		CASE VK_F5:
			MainWnd_OpenButton_Click()
		CASE VK_F7:
			MainWnd_ResetButton_Click()
	End Select
End Sub

Sub MainWnd_CheckBox1_Click()
	if SendMessage(GetDlgItem(hMainWnd,CheckBox1),BM_GETCHECK,0,0) then
		SetWindowPos(hMainWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE)
	Else
		SetWindowPos(hMainWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE)
	End If
End Sub

Sub MainWnd_IDM_SW_MenuClick()
	exec "SystemWatcher.exe"
End Sub

Sub MainWnd_Resize(SizeType As Long, cx As Integer, cy As Integer)
	SendMessage(hStatusWnd,WM_SIZE,cx,cy)
End Sub
EIJI
記事: 25
登録日時: 2005年9月17日(土) 13:15
お住まい: 香川

違っていたら、すみません。

#7 投稿記事 by EIJI »

私の感じたことが、合っていればいいのですが。

M.S.さんはウィンドウの中に子ウィンドウを作って、そこに表示したいのでしょうか?
それでしたら、No.373の'描画領域の作成'が参考になるのではないでしょうか。

違っていたら、すみません。
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

Re: ムービー ファイル再生用のウィンドウ

#8 投稿記事 by NoWest »

> 現在、Audio CD と Audio / Video File の再生ができる、プレイヤーを作っているのですが、
> MPEG や WMV、AVI などのファイルを再生する際、映像を表示するウィンドウを表示させたいのですが、
> やり方がどうしてもわからないので、教えて下さい。
たぶん、WS_VISIBLEが必要だった気がします。

コード: 全て選択

    With vop 
        .dwCallback = hVideoPlayer 
        .lpstrElementName=buffer 
        .dwStyle = WS_CHILD or WS_VISIBLE
        .hWndParent = hMainWnd 
    End With 
> *映像を表示するウィンドウは、それぞれの映像のサイズに大きさが変わるうウィンドウにしたいのです。
>
> お願いします。

MCI_DGV_WHERE系のコマンドを使用します。
そうするとビデオの描画領域が得られます。

確か、MCI_DGV_WHERE_SOURCEだったかMCI_DGV_WHERE_DESTINATIONだったと思います。

使用する構造体は1つの名前で2種類のあるのでお好きな方を使ってください

コード: 全て選択

Type MCI_DGV_RECT_PARMS
	dwCallback As DWord
	ptOffset As POINTAPI
	ptExtent As POINTAPI
End Type

コード: 全て選択

Type MCI_DGV_RECT_PARMS
	dwCallback As DWord
	rc As RECT
End Type
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

Re: 違っていたら、すみません。

#9 投稿記事 by M.S. »

M.S.さんはウィンドウの中に子ウィンドウを作って、そこに表示したいのでしょうか?
いえ、ウィンドウの中に子ウィンドウを作るのではなく、
別のウィンドウの「hVideoPlayer (DialogBox)」です。
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

Re: ムービー ファイル再生用のウィンドウ

#10 投稿記事 by M.S. »

NoWest さん、ありがとうございました!!

おかげで、Audio CD・Audio File・Video File が再生できるプログラムが完成しました!

NoWest さんに教えていただいたコードを全て入れ、

コード: 全て選択

	With vop
		.dwCallback = hVideoPlayer
		.lpstrElementName=buffer
		.dwStyle = WS_CHILD or WS_VISIBLE
		.hWndParent = hMainWnd
	End With

コード: 全て選択

	With vop
		.dwCallback = hMainWnd
		.lpstrElementName=buffer
		.dwStyle = WS_CHILD or WS_VISIBLE
		.hWndParent = hVideoPlayer
	End With
に修正したら、再生することに成功しました。

本当にありがとうございました。


ちなみに、「MCI_DGV_RECT_PARMS」は、

コード: 全て選択

Type MCI_DGV_RECT_PARMS 
    dwCallback As DWord 
    ptOffset As POINTAPI 
    ptExtent As POINTAPI 
End Type
を使わせていただきました。
返信する