在这里,可以看到AutoActivate属性默认为DoubleClick,在应用程序执行时,只要用鼠标双击OLE对象,即可启动对应的动作。
【例7.5】
设计两个OLE控件,一个用于播放MIDI序列,一个用于播放AVI视频。
在窗体上绘制两个OLE控件,在插入对象窗口选择“由文件创建”,从浏览器中选择相应的MIDI文件和AVI文件。
由于AutoActivate属性都为DoubleClick,在应用程序执行时,只要用鼠标双击OLE对象,即可播放MIDI序列和AVI视频。
如要控制播放,比如单击“播放”按钮后播放,可针对Command1_CLICK事件编程。在本例中再增加三个按钮数组,即在窗体上绘制三个按钮,分别为“播放”、“编辑”、“结束”,然后进行复制,建立按钮数组。源程序如下:
7.4使用MCI控件开发多媒体程序
下面介绍用VB开发多媒体系统的另一种方法,这也是使用VB开发多媒体系统最主要的方法之一,即运用VB内附的MCI32.OCX,它是通过多媒体控制接口MCI(MicrosoftMultimediaControl6.0)对多媒体设备进行控制的。
7.4.1MCI简介
MCI(MediaControlInterface)是媒体控制接口的意思,它包含在MMSYSTEM。DLL库模块中,用来协调事件与MCI设备驱动程序之间的通信,为控制音频、视频等外围设备,提供了与设备无关的应用程序,并具有可扩充性。由于这些特性,用户的应用程序可以方便使用遵循MCI控制标准的多媒体设备,而且系统升级十分方便,使得开发应用系统无需了解多媒体产品的细节,大大提高了应用系统的开发效率。
1.MCI的接口分类
MCI接口可分成两类:一类是使用命令消息接口函数,另一类是使用命令字符串接口函数。这两种函数中的任何一种都可访问所有的MCI设备。命令消息接口使用消息控制MCI设备,命令字符串接口使用文本命令控制MCI设备。
Windows本身的通信方式是使用消息(Message)来实现的,所以若使用命令消息接口函数来执行Windows的多媒体功能,则速度较快;若用命令字符串接口命令控制MCI设备,文本串中必须包含执行一个命令所需的所有信息,MCI分析文本串,并把它翻译成能送到命令消息接口中的消息才能执行,所以命令字符串接口的执行速度一定慢于命令消息接口。
Windows多媒体模块提供的与MCI有关的命令字符串接口函数有三个:
MCISENDSTRING向一个MCI设备驱动程序发送一个命令字符串
MCIEXECUTE为MCISENDSTRING的简化函数
MCIGETERRORSTRING返回一个同错误代码相对应的错误字符串
2.MCI设备类型
MCI可控制简单设备和复合设备,相应的设备驱动程序也分为简单和复合两类。简单设备是不需要指定数据文件的设备,如CD播放器。复合设备是需要指定相应的数据文件的设备,如MIDI数字音频设备。
应用程序通过MCI控制设备,必须有相应的MCI设备驱动,VB编程中常用到的部分MCI设备驱动如表72所示。
表7.2部分MCI设备驱动
设备类型
设备驱动程序名
描述Cdaudio
Mcida.drv
McidriverforadaudiodevicesSequencer
Mciseq.drv
MicrosoftmcimidisequencerVideodisc
Mcipronr.drv
McidriverforpioneervideodiscplayerMovice
Mcimmp.drv
McidriverformoviceWaveaudio
Mciwave.drv
Mcidriverforwaveformaudio
其他
Mciaap.drv
Mcidriverforfloorflc
Mciavk.drv
Mcidriverforavk
Mciavi.drv
Mcidriverforavi
Mcisca.drv
Mcidriverforvisca
归纳起来,MCI所能控制的多媒体设备如下:
①简单设备:可编程控制的录放像机,可编程控制的激光影碟机,CD音频设备,视频卡(如播放电视/录像机),MPEG解压卡(如播放CDIMovie光盘)。
②复合设备:数字视频播放设备(如*.avi文件),动画播放设备(如*.fli文件),语音录放设备(如*.wav文件),MIDI音序器(如*.mid文件),MPEG解压卡(如*.mpg或*.dat文件)。
7.4.2MCI32.OCX的属性
媒体控制对象涉及的属性和事件很多,表73列出了MCI的部分属性,下面介绍媒体控制对象的一些重要属性。
表7.3MCI的部分属性
属性
描述
属性
描述AutoEnable
自动启用
NotifyMessage
确认信息ButtonVisible
显示按钮
NotifyValue
确认设定值CanEject
能否退出媒体
Orientation
定位CanRecord
能否记录
Position
位置CanStep
能否前进一格画面
RecordMode
记录格式Command
MCI命令
Shareable
能否共享DeviceID
多媒体设备代码
Silent
静音DeviceType
多媒体设备类型
Start
开始位置Error
错误
TimeFormat
时间格式ErrorMessage
错误信息
To
结束位置FileName
文件名
Track
磁道Frames
画面
TrackLength
磁道长度Length
媒体长度
Tracks
磁道总数Mode
目前所处状态
Visible
能否显示MousePoint
鼠标指针形状
Wait
等待Notify
确认hWndDisplay设定窗口
From起始位置TrackPosition轨道起始位置UpdateInterval更新间隔。
1.有关外观的属性
1)AutoEnable属性
AutoEnable属性设置为True时,媒体对象自动监测所指定的多媒体设备状态,并自动决定按钮的状态。AutoEnable属性设置为False时,可通过ButtonEnabled属性设置,决定媒体控件中按钮的有效性。
2)ButtonVisible属性
ButtonVisible属性设置为False时,按钮在媒体控件上消失。
3)Visible属性
设定媒体控制对象在程序执行阶段是否显示出来。
4)CanEject,CanRecord,CanStep属性
这些属性在设计阶段不可见,即在属性窗口中不出现,运行时只读。主要用来监测打开的设备是否具有弹出媒体、播放、录制、步进等功能。
5)Orientation属性
该属性设定媒体控制对象按钮的排列方向。
2.对媒体的一般控制功能
一般控制功能是指对媒体的通用控制功能,它几乎适用于所有的媒体设备。
1)DeviceType属性
指定要打开的媒体设备类型,MCI控件可根据文件扩展名自动设置设备类型。
2)FileName属性
以【打开】命令指定要打开的文件,或以【保存】命令指定要保存的文件。针对复合设备,必须指定文件名才可以打开和保存。
3)Command属性
执行一个MCI控制命令,属性窗口不显示该属性。可以使用14个基本命令来完成一些功能,如表74所示。具体格式是:
媒体控制对象.Command=MCI控制命令
表7.4MCI常用控制命令列表
MCI控制命令说明MCI控制命令说明
Open打开媒体设备Record录制Close关闭媒体设备Prev回到目前磁道的起始点Play播放Next到下一个磁道的起始点Pause暂停Seek搜索指定的位置Stop停止Eject退出媒体Back后退一格画面Sound播放声音Step前进一格画面Save存储。
4)hWndDisplay属性
通过设置该属性,给需要窗口的多媒体设备设定一个窗口,这类多媒体设备通常指Avivideo和Overlay设备。对Avivideo设备而言,如果不提供窗口设置,系统主动提供一个缺省窗口显示视频。
5)From,To属性
用在Play或Record前,表示播放或录制的起始、结束位置。
6)TimeFormat,Position,Start属性
TimeFormat用来设定时间格式,如果未设定TimeFormat或所用的设备不支持设定值,则系统会使用缺省值。Timeformat的属性说明如表75所示。
表7.5TimeFormat的属性说明
属性值
说明0Milliseconds以ms为单位1
HMS以时分秒为单位,用4个字节存储,前3个字节对应于时分秒,最后字节未用2
MSF以分秒帧为单位,用4个字节存储,前3个字节对应于分秒帧,最后字节未用3
以帧为单位8
以字节为单位9
以取样为单位
根据设定的TimeFormat属性值,Position属性返回已打开的媒体设备的位置,一般用4个字节表示。Position属性在程序执行时只读,在属性窗口不可见,即用户不能通过改变该属性值来改变媒体设备的位置。Start属性根据目前的时间格式,返回媒体设备的起始位置。同样,该属性在程序执行时只读,在属性窗口不可见。
7)Mode属性
Mode的属性说明如表76所示。
为顺利运行下一个MCI命令,常可通过对Mode属性的读取,获得设备的当前状况。例如,在播放声音文件前,通过检测设备状态,确保设备关闭后再打开。其程序段如下:
IfNotMMControl1.Mode=524Then
MMControl1.Command=“close”
EndIf
MMControl1.FileName=“指定要打开的文件名”
MMControl1.Command=“open”…
8)Silent属性
决定声音是否可以播放。
9)Shareable属性
决定多个程序是否能共享一个MCI设备。一般而言,此属性针对的是简单设备,而复杂设备不能共享。
10)Track,TrackLength,TrackPosition,Tracks属性
目前,Track只用在cdaudio,videodisk中,该属性指定特定的轨道(Track)供TrackLength及TrackPosition属性传回相关信息。就cdaudio而言,每个TrackLength代表一首歌中Track属性指定的轨道的时间长度。TrackPosition指定轨道的起始位置,Tracks传回轨道数。
11)UpdateInterval属性
该属性的值决定两次StatusUpdate事件之间的us数。如果其值为0,将不会有任何的StatusUpdate事件发生。
7.4.3MCI32.OCX的事件
媒体控制对象的事件有Done、ButtonClick、ButtonCompleted、ButtonGotFocus、ButtonLostFocus和StatusUpdate,事件描述如表77所示。Button可以是【Prev】、【Next】、【Play】、【Pause】、【Back】、【Step】、【Stop】、【Record】或【Eject】九个按钮之中的一个,如PlayClick事件。下面对这些事件进行简单的说明。
表7.7媒体控制对象的所有事件及描述
描述事件
描述Done
完成MCI命令动作ButtonGotFocus
按钮取得焦点BottonClick
单击按钮ButtonLostFocus
按钮失去焦点BottonCompleted
按钮动作完成StatusUpdate
更新媒体控制对象的状态报告
1)ButtonClick事件
语法格式:SubMMControln_ButtonClick(CancelAsInteger)。
其中n为媒体控制对象的序号,以后不再说明。
当MCI控件在运行阶段时,单击控件上的按钮激发相应的事件。在默认状态下,每个按钮的Click事件都是执行一个该按钮对应的MCI指令,例如,PlayClick事件执行一条MCI的play指令。即若在ButtonClick事件中,未将Cancel参数设为True,或未传True给ButtonClick事件,则系统先执行按钮代表的MCI指令,再执行事件过程中的语句。反之,若将Cancel参数设为True,则系统不执行按钮代表的MCI指令,而是直接执行事件过程中的语句。
2)ButtonCompleted事件
语法格式:SubMMControln_ButtonCompleted(ErrorcodeAsLong)。
媒体控制对象上按钮对应的MCI控制命令执行时,激发该事件。在事件中返回参数Errorcode,错误代码Errorcode的值所代表的意义如下:
·0MCI控制命令执行成功
·其他MCI控制命令执行不成功
3)ButtonGotFocus,ButtonLostFocus事件
当媒体控制对象的按钮取得焦点或失去焦点时分别激发ButtonGotFocus或ButtonLostFocus事件。
4)Done事件
语法格式:SubMMControln_Done(NotifyCodeAsInteger)。
在Notify属性设置为True时,MCI控制命令执行完毕时激发该事件。NotifyCode的值表示MCI控制命令是否完成,其设定值说明如表78所示:
7.4.4MCI编程举例
当进入VB6.0时,工具箱(ToolBox)中不包含MCI32.OCX,若要使用必须首先将其加入到工具箱中。办法如下: