VISUALBAISC5.0에서는 비디오 애니메이션 파일(*.AVI)을 재생하는 방법을 사용하여 소프트웨어에 애니메이션 효과를 추가할 수 있습니다. 그런데 소프트웨어에서 비디오 PIP 효과를 어떻게 얻을 수 있습니까? 저자의 탐구 후에 나는 WIDOWS95의 API 함수 mciExecute, mciSendString 및 SetWindowPos를 사용하여 이 효과를 얻을 수 있음을 발견했습니다.
아래에서 저자는 비디오 PIP 구현 방법을 설명하기 위해 가장 일반적으로 사용되는 큰 그림에 작은 그림을 중첩하는 방법을 예로 들어 설명합니다.
1. 양식을 만듭니다. VISUALBAISC5.0 시스템 환경을 입력하고 새 양식 FORM1을 만듭니다.
2. 비디오 창을 생성합니다. 여기서 저자는 비디오 창으로 하나는 크고 하나는 작은 두 개의 그림 상자(PictureBox)를 사용합니다. 컨트롤 도구 상자에서 PictureBox 컨트롤을 선택하고 양식에서 두 개의 상자(Picture1 및 Picture2)를 꺼냅니다. 그 중 Picture1은 큰 화면으로 AVI01.AVI 파일을 재생하고, Picture2는 작은 화면으로 AVI02.AVI 파일을 재생합니다.
3. 해당 컨트롤에 대한 스크립트를 작성합니다.
공통 모듈:
DeclareFunctionmciExecuteLib"winmm.dll"(ByVallpstrCommandAsString)AsLong
DeclareFunctionmciSendStringLib"winmm.dll"별칭"mciSendStringA"(ByVallpstrCommandAsString,ByVallpstrReturnStringAsString,ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLong
DeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong
FORM1의 프로세스 활성화:
DimAAAsLong
DimPlayAviAsLong
DimtmpValAsString
DimKeyValSizeAsLong
OnErrorResumeNext
tmpVal=문자열$(1024,0)
KeyValSize=1024
PlayAvi=mciSendString("STATUSAVI01READY" Str(Picture2.hwnd),tmpVal,KeyValSize,0)
IfPlayAvi<>263그러면
PlayAvi=mciExecute("closeAVI01")
종료
tmpVal=문자열$(1024,0)
KeyValSize=1024
PlayAvi=mciSendString("OPENAVI01.AVIALIASAVI01TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture2.hwnd) "WAIT",tmpVal,KeyValSize,0)
x1Pos=그림1.폭
y1Pos=그림1.높이
tmpVal=문자열$(1024,0)
KeyValSize=1024
AA=mciSendString("STATUSAVI01WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)
If(Asc(Mid(tmpVal,KeyValSize,1))=0)Then
tmpVal=왼쪽(tmpVal,KeyValSize-1)
또 다른
tmpVal=왼쪽(tmpVal,KeyValSize)
종료
AA=SetWindowPos(tmpVal,0,0,0,x1Pos,y1Pos,0)
AA=mciExecute("WINDOWAVI01STATESHOW")
tmpVal=문자열$(1024,0)
KeyValSize=1024
PlayAvi=mciSendString("STATUSAVI02READY" Str(Picture1.hwnd),tmpVal,KeyValSize,0)
IfPlayAvi<>263그러면
PlayAvi=mciExecute("CLOSEAVI02")
종료
tmpVal=문자열$(1024,0)
KeyValSize=1024
PlayAvi=mciSendString("OPENAVI02.AVIALIASAVI02TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture1.hwnd) "WAIT",tmpVal,KeyValSize,0)
x1Pos=그림2.폭
y1Pos=그림2.높이
tmpVal=문자열$(1024,0)
KeyValSize=1024
AA=mciSendString("STATUSAVI02WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)
If(Asc(Mid(tmpVal,KeyValSize,1))=0)Then
tmpVal=왼쪽(tmpVal,KeyValSize-1)
또 다른
tmpVal=왼쪽(tmpVal,KeyValSize)
종료
AA=SetWindowPos(tmpVal,0,0,0,x1Pos,y1Pos,0)
MciExecute"WINDOWAVI02STATESHOW"
MciExecute"PLAYAVI01REPEAT"
MciExecute"PLAYAVI02REPEAT"
OnErrorGoTo0
FORM1의 QueryUnload 프로세스:
mci실행"STOPAVI01"
mci실행"STOPAVI02"
mci실행"CLOSEAVI01"
mci실행"CLOSEAVI02"
이 프로그램을 실행하면 두 개의 애니메이션이 동시에 재생되어 비디오의 PIP 효과를 얻는 것을 볼 수 있습니다. 위의 프로그램은 VISUALBAISC5.0 및 WINDOWS95에서 성공적으로 실행됩니다. ->