网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Visual Basic
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.“会报数的计算器”的基本实现.
.如何控制系统音量.
.如何用API及MMSYSTEM.DLL播放AVI.
.从头开始删除集合项目.
.MicrosoftAccess秘密、技巧和陷阱.
.复本操作的对象、属性和方法(1)-.
.VB5.0数据库编程经验小集.
.VB如何将DBgrid印出来.
.在VB中实现移动没有标题栏的窗口.
.HierarchicalFlexGrid控件.
.VB编程计算农历的计算方法.
.如何提高调用WindowAPI函数编程技.
.查找替换所选字符.
.SQL的基本操作(2.数据库的相关操.
.多用户应用程序中应注意问题.
.如何在VB中实现绘图区的大十字光.
.如何对字符串进行加密解密.
.VB环境多媒体压缩数据流播放技术.
.VisualBasic工程管理一.
.用VB实现实时曲线的绘制和保存.

VisualBasic5.0中实现视频画中画

发表日期:2006-2-27


在VISUALBAISC5.0中可以使用播放视频动画文件(*.AVI)的方法在我们的软件中加入动画效果,但在软件中如何实现视频画中画的效果呢?经笔者摸索,发现利用WIDOWS95的API函数mciExecute、mciSendString和SetWindowPos可实现这一效果。

下面笔者以最常用的大画面中叠加小画面为例来说明视频画中画的实现方法。

一、建立窗体。进入VISUALBAISC5.0系统环境,建立一个新的窗体FORM1。

二、建立视频窗口。在这里笔者使用了一大一小的两个图画框(PictureBox)作为视频窗口。选择控件工具箱中的PictureBox控件,在窗体中拉出两个方框(Picture1和Picture2)。其中Picture1为大画面,播放AVI01.AVI文件;Picture2为小画面,播放AVI02.AVI文件。

三、编写相应控件的脚本。

通用模块:

DeclareFunctionmciExecuteLib"winmm.dll"(ByVallpstrCommandAsString)AsLong

DeclareFunctionmciSendStringLib"winmm.dll"Alias"mciSendStringA"(ByVallpstrCommandAsString,ByVallpstrReturnStringAsString,ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLong
DeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong

FORM1的ACTIVATE过程:

DimAAAsLong

DimPlayAviAsLong

DimtmpValAsString

DimKeyValSizeAsLong

OnErrorResumeNext

tmpVal=String$(1024,0)

KeyValSize=1024

PlayAvi=mciSendString("STATUSAVI01READY" Str(Picture2.hwnd),tmpVal,KeyValSize,0)

IfPlayAvi<>263Then

PlayAvi=mciExecute("closeAVI01")

EndIf

tmpVal=String$(1024,0)

KeyValSize=1024

PlayAvi=mciSendString("OPENAVI01.AVIALIASAVI01TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture2.hwnd) "WAIT",tmpVal,KeyValSize,0)

x1Pos=Picture1.Width

y1Pos=Picture1.Height

tmpVal=String$(1024,0)

KeyValSize=1024

AA=mciSendString("STATUSAVI01WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)

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

tmpVal=Left(tmpVal,KeyValSize-1)

Else

tmpVal=Left(tmpVal,KeyValSize)

EndIf

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

AA=mciExecute("WINDOWAVI01STATESHOW")

tmpVal=String$(1024,0)

KeyValSize=1024

PlayAvi=mciSendString("STATUSAVI02READY" Str(Picture1.hwnd),tmpVal,KeyValSize,0)

IfPlayAvi<>263Then

PlayAvi=mciExecute("CLOSEAVI02")

EndIf

tmpVal=String$(1024,0)

KeyValSize=1024

PlayAvi=mciSendString("OPENAVI02.AVIALIASAVI02TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture1.hwnd) "WAIT",tmpVal,KeyValSize,0)

x1Pos=Picture2.Width

y1Pos=Picture2.Height

tmpVal=String$(1024,0)

KeyValSize=1024

AA=mciSendString("STATUSAVI02WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)

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

tmpVal=Left(tmpVal,KeyValSize-1)

Else

tmpVal=Left(tmpVal,KeyValSize)

EndIf

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

MciExecute"WINDOWAVI02STATESHOW"

MciExecute"PLAYAVI01REPEAT"

MciExecute"PLAYAVI02REPEAT"

OnErrorGoTo0

FORM1的QueryUnload过程:

mciExecute"STOPAVI01"

mciExecute"STOPAVI02"

mciExecute"CLOSEAVI01"

mciExecute"CLOSEAVI02"

运行此程序可见两个动画同时播放,实现了视频画中画的效果。以上程序在VISUALBAISC5.0及WINDOWS95中运行通过。->

上一篇:怎样在VB中播放Flash动画 人气:3784
下一篇:用FreeFile防止文件打开冲突 人气:4587
浏览全部Visual Basic的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐