目前使用人数最多的多媒体程序设计开发工具是VisualBasic(简称VB),是由美国Microsoft公司推出的基于Windows平台的程序开发工具,它从根本上改变了传统的程序设计模式,大大简化了Windows应用程序设计,可以编程处理文本、图像、动画、声音等多媒体数据,以设计或构造适合不同需求的多媒体应用系统。
本章介绍VB的基本概念,利用VB及其自身提供的MMCONTROL控制对象、多媒体控件及API函数的调用来开发多媒体程序。
7.1多媒体程序设计概述
设计多媒体软件,关键是对多种媒体设备的控制和使用。在Windows系统中,对多媒体设备进行控制主要有三种方法。
第一种方法是使用OLE(ObjectLinking&Embedding,对象链接与嵌入),它为不同软件之间共享数据和资源提供了有力的手段。目前,OLE技术得到了广泛的关注,OLE2.0标准得到越来越多的软件开发商的支持。
第二种方法是使用微软公司Windows系统中对多媒体支持的MCI(MediaControlInterface,媒体控制接口),MCI是多媒体设备和多媒体应用软件之间进行设备无关的沟通的桥梁。通过VB提供的MCI控件,就可以在VB中使用MCI指令控制各种多媒体外部设备,并读取各种多媒体系统所需的文件格式。
第三种方法是通过调用Windows的API(ApplicationProgrammingInterface,应用程序接口)多媒体相关函数实现媒体控制。
7.1.1多媒体应用结构
为支持多媒体,微软公司早在Windows3.0的基础上添加了多媒体扩充软件,而Windows3.1系统直接包含多媒体扩充软件,并支持对象的链接和嵌入(OLE)技术,为开发多媒体应用程序的软件人员提供了各种低级和高级服务功能,其中,MCI是其主要功能。WIN98/2000及更新版本加强了支持多媒体的能力,如即插即用,支持CD播放等。
Windows多媒体应用结构如图71所示。
①MMSYSTEM库,它提供了多媒体控制接口(MCI)服务和底层的多媒体支持函数(低级API函数)服务。
②多媒体设备驱动程序,它提供了低级MMSYSTEM函数与基本多媒体设备(如波形音频设备、MIDI设备、操作杆、定时器)之间的通信。
③媒体控制接口(MCI)的驱动程序,它提供了对媒体设备的高级控制,用于记录波形音频,演奏MIDI,播放CD、影碟等。
④提供了其他一些MCI设备驱动程序,像FLC、FLI三维动画,DVI动态视频,AVI、MCI影片器,以及与其他WindowsDLL的高层接口(如AAPLAY.DLL)等。
由上可知,多媒体控制接口(MCI)为多媒体模块中的高级接口,它是一种人机界面友好的接口,其控制能力比低级接口弱,但一般已能满足用户的要求。它通过API的某些函数调用,启动MCI指令,来控制多媒体设备,根据调用方式可分成基于字符串或基于消息的两类MCI接口。而用低级接口中的多媒体API函数,可以直接控制Waveform、MIDI、计时器、游戏操纵杆以及动画等。这类函数以“wave”,“midi”,“time”,“joy”,“mmp”,“snd”,“aux”,“mmi”开头。
7.1.2VB编程的基本概念
VB作为一种可视化的编程语言,具有如下特点:
1)三个重要概念
①窗口:窗口是一种有边界的矩形区域,例如,VB窗口、Word的文档窗口、对话框窗口等。
②事件:事件是通过鼠标、按键的操作、程序的控制或其他窗口所产生的操作或行为。
③消息:事件发生时就引发一条消息发送到操作系统。
2)事件驱动模型
事件驱动模型具有非过程化的特点,在事件驱动模型中,程序代码不是按照预定的顺序执行,而是在响应不同的事件时执行不同的代码片段。
3)Windows的工作方式
Windows操作系统通过给每一个窗口提供一个唯一的标志符来管理所有窗口。操作系统连续地监视每一个窗口的活动或事件信号。当事件发生时,就引发一条消息,操作系统处理该消息并广播给其他窗口,最后,每一个窗口根据自身处理该条消息的指令而采取适当的操作。
7.1.3VB中的对象
对象是代码和数据的组合,可以作为一个单位来处理。对象,简单地说就是我们经常看到的各种窗口、按钮、文本框等。对象可以是应用程序的一部分,比如控件或窗体。整个应用程序也是一个对象。具体地说,在VB中对象可分为全局对象和程序界面对象。
1.全局对象
全局对象是指应用程序在程序的任何层次都可以访问的对象,共有以下几种。
①APP:设计的应用程序,它的属性决定应用程序的标题、路径、可执行文件名以及帮助文件名等。
②Clipboard:它就是Windows中的剪贴板,在VB应用程序中可用关键字Clipboard来访问它,从而操作其上的数据或图形,即将数据送到剪贴板上或从剪贴板上取回数据。
③Screen:计算机屏幕,也是应用程序窗口的“容器”,通过它可以设置应用程序的窗口在屏幕上的位置以及鼠标指针的形状。
④Debug:调试窗口,当应用程序在VB集成环境中运行时它才显示出来,用于调试程序。
⑤Printer:打印机,联机的打印机也是一个对象,应用程序可操作它在纸上输出结果。
2.程序界面对象
程序界面对象共有以下几种。
1)Form:窗体
VB工程中的每一个窗体都是独立的对象,类似控件对象,它们提供一些事件过程,可作为程序界面或对话框。绝大多数情况下,人们把窗体当做在其中能放置控件的框架,它是应用程序界面中的部件或对话框中的部件的“容器”。
2)Control:控制部件(控件)
这是和用户交互的标准部件,命令按钮、文本框、列表框、滚动条、菜单等都属此类。除菜单控件外,所有控件都可用工具箱中的工具“画”出来。菜单控件是用菜单设计窗口作为工具设计出来的。界面设计就是在窗体上放置控件并指定其属性。
3)数据库访问对象
数据库是对象,并且还包含其他对象,如字段、索引等。专业版的VB可以操作数据库,数据库访问对象是为访问数据库而设的。
7.1.4VB程序设计要素
通常,一个VB程序至少含有一个窗体,在这个窗体中可以包含一个或多个对象,并以控件的形式存在。控件不仅拥有属性,还拥有事件过程,它决定当控件有一个或几个操作行为激活时所发生的事情。
1.属性(Properties)的设置
属性是一个对象的性质,它决定对象的外观和一般行为。对象的属性中,有的属性在设计时可更改,可通过属性窗口加以设置;有的属性是系统赋予对象的,只能在运行时访问,但不可更改;有的属性仅在运行时才可访问和更改。后两种属性出现在属性窗口的列表中。
在程序中,访问对象属性的格式如下:
\[对象名.\]属性
其中,对象名和属性间用“.”连接,若省略对象名,则指当前具有焦点的对象。上述组合可看做是一个变量,即可对其赋值(除非是只读属性),也可将其值赋予别的变量。
2.事件(Event)的产生
事件就是系统可以感知的用户操作信息,可以看做是系统对对象的响应。事件通常触发VB程序中的一段代码。事件可分为鼠标事件、键盘事件和其他事件。每个对象都可引发事件,在VB中都已经准备好对应的事件过程,程序员只需编写响应事件的代码。
3.函数(Function)、过程(Procedure)和方法(Method)的作用
1)函数
函数是包含操作数据的程序语句集。当我们需要完成某种任务时,就要调用过程;当我们需要返回值时,就要调用函数。VB包括几十种函数,这些函数执行通用的操作,如修改字符串的前导空格或去掉其尾部空格或计算一个角度的正弦。
2)过程
在VB中,每个对象可引发的事件过程的模板已经准备好,在设计时,双击控件,可打开与此控件有关的代码窗口,在过程下拉列表框中,列出了这个控件可能引发的事件对应的过程。选择某一过程可打开该过程的代码模板。另一种过程就是函数,和对象相联系的函数用于改变或设置对象的某种属性,例如,LoadPicture函数可设置窗体的Picture属性。
3)方法
VB中的窗体和控件对象给我们提供了一种特殊的过程,它在程序控制下工作,可以看做是对象的动作。在面向对象程序设计中,这样的过程叫做方法。方法是一种特殊的过程,它和过程的差别是它从属于特定的对象,因此调用时必须指明对象。方法的调用语法为:
\[对象名.\]方法\[参数\]
对象名和方法之间用“.”连接,若省略对象名,则对象指的是当前的活动对象。例如,调用Debug对象的Print方法,可用语句:
Debug.Print
4.模块(Module)组织
VB应用程序的代码是以分层方式组织并存储在模块中的。典型的应用程序应包括若干模块:应用程序中每个窗体的窗体模块、共享代码的可选标准模块及可选的类模块。每个模块包含若干含有代码的过程:Event事件过程、Sub子过程或Function函数以及Property属性过程。
每个标准模块、类模块和窗体模块都可包含声明及过程。
①声明:可以将常数、类型、变量和动态链接库(DLL)过程的声明放在窗体、类或标准模块的模块级。
②过程:可以是Sub、Function或Property过程。它包含可以作为单元来执行的代码片段。
7.2利用VB编写特殊效果的程序
在这一部分主要是利用VB编写各种特殊效果的程序,像字体的缩放/闪烁、流动屏幕的设计、图形大小的更改、简单动画的应用等。下面给出几个简单例子(以VB6.0版本举例)。
【例7.1】在屏幕上对字符串“多媒体应用实例一”进行自动缩放。
在屏幕上绘制一个标签控件和计时控件,有关属性设置如表71所示。
其中bfly1.bmp和bfly2.bmp是VB提供的蝴蝶扑动的两个不同时刻的图片,让其在图片框上交替显示,演示蝴蝶扑动的动画。
【例7.3】LoadPicture函数实例。
使用LoadPicture函数将图片加载到窗体的PictureBox控件,单击窗体,PictureBox控件上的图片被清除。源程序如下:
PrivateSubForm_ClickDimMsgAsString’声明变量
OnErrorResumeNext’设置错误句柄
Height=3990’设置高度
Width=4890’设置宽度
Picture1.Picture=LoadPicture(App.Path+“\\Pic1.jpg”,vbLPCustom,vbLPColor,32,32)
’图片保存在当前工程文件所在的目录下
IfErrThen’加载图片
Msg=“Couldn’tfindthe.jpgfile.”
MsgBoxMsg’显示错误信息
ExitSub’如果发生错误则退出
7.3使用OLE控件开发多媒体程序
OLE是ObjectLinkingandEmbedding的缩写,意思为对象链接与嵌入技术,其含义是将一个包含OLE功能的程序链接或嵌入到其他基于OLE的Windows应用程序中。OLE技术能够实现不同软件之间的无缝集成,程序员可以把以前编写好、测试过的模块以对象方式插入到正在编写的程序中,这样就明显地提高了程序的结构性和软件开发效率。
7.3.1OLE控件属性介绍
在VB提供的VB工具箱中就有OLE控件对象。要使用OLE时,只要双击OLE控件,就能在窗体中绘制OLE控件,然后根据提问或直接在属性窗口设置OLE控件属性。其主要属性有以下几种。
①AutoActivate属性,设置OLE对象的激活方式。取值如下:
·0Manual,程序控制,Action值为7时数据激活;
·1GetFocus,当OLE控件获得输入焦点时数据激活;
·2DoubleClick,当双击OLE控件时数据激活,这是默认值;
·3Automatic,自动激活。
②Class属性,返回/设置一个嵌入式对象的类名。常用的与多媒体有关的类名有AVIFile(视频媒体)、midfile(MIDI文件)、mplayer(媒体播放器)、soundrec(录音)、pbrush(画笔)等。
③OLETypeAllowed属性,返回/设置OLE容器控件所能包含的对象类型。
④SizeMode属性,决定OLE容器控件如何改变大小及如何显示图像。
⑤SourceDoc属性,返回/设置创建对象时的磁盘文件(目录\\文件名)。
⑥SourceItem属性,返回/设置创建一个可链接对象时被链接文件内的数据。
⑦UpdateOptions属性,决定修改链接的数据时对象如何更新。
⑧Verb属性,返回/设置当使用Action属性激活对象时所执行的操作。取值如下:
·0OLE数据的缺省行为,一般为播放;
·1数据编辑,激发外部程序对数据编辑;
·2显示单独窗口进行数据编辑;
·3外部数据处理程序不可见。
⑨AutoActive的属性的缺省值为DoubleClick,意味着当执行VB程序时,只要在OLE对象上用鼠标双击,就可以直接驱动对象的动作。也可以将这样的属性关闭,而通过事件来启动。
如要播放,则在事件中加入如下代码:
OLEn.verb=0n为OLE对象序号,表示直接Play
OLEn.action=7表示直接驱动OLE
如要启动相关工具,并处于允许用户编辑的状态,可以在事件中加入如下代码:
OLEn.verb=-1n为OLE对象序号
OLEn.action=7
如要停止一个OLE对象的动作,只要在事件中加入如下代码:
OLEn.action=9
7.3.2多媒体OLE范例程序
【例7.4】在程序中嵌入一个位图。
①在窗体上绘制OLE控件,显示插入对象窗口。
②选择“由文件创建”,单击“浏览”按钮,选择所需嵌入的图像。如为链接图像,则在窗口中选择“链接”,也可为OLE对象选择一个“显示为图标”选项,此时单击“显示为图标”选项。
③按确定按钮。