Visual Basic 5.0中實現視頻畫中畫

發表于:2007-07-14來源:作者:點擊數: 標簽:
在VISUAL BAISC 5.0中可以使用播放視頻動畫文件(*.AVI)的方法在我們的軟件中加入動畫效果,但在軟件中如何實現視頻畫中畫的效果呢?經筆者摸索,發現利用WIDOWS 95的API函數mciExecute、mciSendString和SetWindowPos可實現這一效果。 下面筆者以最常用的大
在VISUAL BAISC 5.0中可以使用播放視頻動畫文件(*.AVI)的方法在我們的軟件中加入動畫效果,但在軟件中如何實現視頻畫中畫的效果呢?經筆者摸索,發現利用WIDOWS 95的API函數mciExecute、mciSendString和SetWindowPos可實現這一效果。

下面筆者以最常用的大畫面中疊加小畫面為例來說明視頻畫中畫的實現方法。

一、建立窗體。進入VISUAL BAISC 5.0系統環境,建立一個新的窗體FORM1。

二、建立視頻窗口。在這里筆者使用了一大一小的兩個圖畫框(PictureBox)作為視頻窗口。選擇控件工具箱中的PictureBox控件,在窗體中拉出兩個方框(Picture1和Picture2)。其中Picture1為大畫面,播放AVI01.AVI文件;Picture2為小畫面,播放AVI02.AVI文件。

三、編寫相應控件的腳本。

通用模塊:

Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long

Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String,ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

FORM1的ACTIVATE過程:

Dim AA As Long

Dim PlayAvi As Long

Dim tmpVal As String

Dim KeyValSize As Long

On Error Resume Next

tmpVal = String$(1024, 0)

KeyValSize = 1024

PlayAvi = mciSendString("STATUS AVI01 READY" + Str(Picture2.hwnd),tmpVal, KeyValSize, 0)

If PlayAvi <> 263 Then

PlayAvi = mciExecute("close AVI01")

End If

tmpVal = String$(1024, 0)

KeyValSize = 1024

PlayAvi = mciSendString("OPEN AVI01.AVI ALIAS AVI01 TYPE AVIVIDEO STYLE CHILD PARENT " + Str(Picture2.hwnd) + " WAIT", tmpVal, KeyValSize, 0)

x1Pos = Picture1.Width

y1Pos = Picture1.Height

tmpVal = String$(1024, 0)

KeyValSize = 1024

AA = mciSendString("STATUS AVI01 WINDOW HANDLE WAIT", tmpVal, KeyValSize, 0)

If (Asc(Mid(tmpVal, KeyValSize, 1)) = 0) Then

tmpVal = Left(tmpVal, KeyValSize - 1)

Else

tmpVal = Left(tmpVal, KeyValSize)

End If

AA = SetWindowPos(tmpVal, 0, 0, 0, x1Pos, y1Pos, 0)

AA = mciExecute("WINDOW AVI01 STATE SHOW")

tmpVal = String$(1024, 0)

KeyValSize = 1024

PlayAvi = mciSendString("STATUS AVI02 READY" + Str(Picture1.hwnd), tmpVal, KeyValSize, 0)

If PlayAvi <> 263 Then

PlayAvi = mciExecute("CLOSE AVI02")

End If

tmpVal = String$(1024, 0)

KeyValSize = 1024

PlayAvi = mciSendString("OPEN AVI02.AVI ALIAS AVI02 TYPE AVIVIDEO STYLE CHILD PARENT " + Str(Picture1.hwnd) + " WAIT", tmpVal, KeyValSize, 0)

x1Pos = Picture2.Width

y1Pos = Picture2.Height

tmpVal = String$(1024, 0)

KeyValSize = 1024

AA = mciSendString("STATUS AVI02 WINDOW HANDLE WAIT", tmpVal, KeyValSize, 0)

If (Asc(Mid(tmpVal, KeyValSize, 1)) = 0) Then

tmpVal = Left(tmpVal, KeyValSize - 1)

Else

tmpVal = Left(tmpVal, KeyValSize)

End If

AA = SetWindowPos(tmpVal, 0, 0, 0, x1Pos, y1Pos, 0)

MciExecute "WINDOW AVI02 STATE SHOW"

MciExecute "PLAY AVI01 REPEAT"

MciExecute "PLAY AVI02 REPEAT"

On Error GoTo 0

FORM1的QueryUnload過程:

mciExecute "STOP AVI01"

mciExecute "STOP AVI02"

mciExecute "CLOSE AVI01"

mciExecute "CLOSE AVI02"

運行此程序可見兩個動畫同時播放,實現了視頻畫中畫的效果。以上程序在VISUAL BAISC 5.0及WINDOWS 95中運行通過。 

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97