ch8 多媒体应用程序设计.ppt
第8章多媒体应用程序设计8.1VisualBasic程序设计1VisualBasic简介VisualBasic是由微软公司推出的一套完整的Windows系统软件开发工具,可用于开发Windows环境下的各类应用程序,是一种可视化、真正面向对象、采用事件驱动方式的结构化高级程序设计语言和工具的完美集成。不论是Windows应用程序的资深专业开发人员还是初学者,VisualBasic都提供了相应的成套工具,可以非常方便的用来进行程序开发。2Visual Basic的版本的版本1991年,微软公司展示了一个叫Thunder的产品,它可以用鼠标“画”出所需的用户界面,然后用简单的BASIC语言编写业务逻辑就可以生成一个完整的应用程序。这种全新的“Visual”的开发给Windows开发人员开辟了新的天地。这个产品最终被定名为VisualBasic,采用事件驱动、QuickBASIC的语法和可视化的IDE。从1991年至今,VisualBasic获得了巨大的成功。微软公司不断改进这个开发工具,使它不仅成为开发人员进行Windows一般应用乃至企业级应用开发的快速利器,同时也成为微软公司的开发工具家族中不可动摇的一员。自1992年至1997年,微软先后推出了VisualBasic2.0、3.0、4.0、5.0。8.1VisualBasic程序设计2Visual Basic的版本的版本1998推出的VisualBasic6.0已经是非常成熟稳定的开发系统,能让企业快速建立多层的系统以及Web应用程序,成为当前在Windows上最流行的VisualBasic版本。2002年微软推出了VisualBasic.NET,是一个现代的、强壮的、面向对象的、简单的可视化开发语言,具有极其强大的语言功能。但由于兼容性变差,使用人数也降低了,使得目前大多数VisualBasic编程人员仍在使用VisualBasic6.0。另一方面,VisualBasic.NET也比VisualBasic6.0难以学习使用。对初学者来说,VisualBasic6.0更易上手。基于此种原因,本书选用VisualBasic6.0作为开发环境。8.1VisualBasic程序设计2Visual Basic的版本的版本VisualBasic6.0有三种版本可满足不同的开发需要。VisualBasic学习版使编程人员轻松开发Windows和WindowsNT(R)的应用程序。该版本包括所有的内部控件以及网格、选项卡和数据绑定控件。专业版为专业编程人员提供了一整套功能完备的开发工具。该版本包括学习版的全部功能以及ActiveX控件、InternetInformationServerApplicationDesigner、集成的VisualDatabaseTools和DataEnvironment、ActiveDataObjects、和DynamicHTMLPageDesigner。企业版使得专业编程人员能够开发功能强大的组内分布式应用程序。该版本包括专业版的全部功能以及BackOffice工具。8.1VisualBasic程序设计3Visual Basic的启动和退出的启动和退出VB启动后出现“新建工程”对话框窗口,该窗口提示你选择要建立的项目类型,或是选择一个现存的或者是一个最近使用的项目来打开。8.1VisualBasic程序设计3Visual Basic的启动和退出的启动和退出选择建立标准EXE,进入的VB6.0编程环境。8.1VisualBasic程序设计3Visual Basic的启动和退出的启动和退出选择建立标准EXE,进入的VB6.0编程环境。8.1VisualBasic程序设计菜单条提供所使用的VisualBasic命令3Visual Basic的启动和退出的启动和退出选择建立标准EXE,进入的VB6.0编程环境。8.1VisualBasic程序设计工具栏提供了在编程环境下对于常用命令的快速访问3Visual Basic的启动和退出的启动和退出选择建立标准EXE,进入的VB6.0编程环境。8.1VisualBasic程序设计工具箱提供一组工具,用于设计时在窗体中放置控件3Visual Basic的启动和退出的启动和退出选择建立标准EXE,进入的VB6.0编程环境。8.1VisualBasic程序设计工程管理器窗口列出当前工程中的窗体和模块3Visual Basic的启动和退出的启动和退出选择建立标准EXE,进入的VB6.0编程环境。8.1VisualBasic程序设计属性窗口列出对选定窗体和控件的属性设置值3Visual Basic的启动和退出的启动和退出选择建立标准EXE,进入的VB6.0编程环境。8.1VisualBasic程序设计窗体设计器作为自定义窗口用来设计应用程序的界面8.1.2 程序设计过程程序设计过程1VisualBasic的编程思想首先创建界面,它是用户与应用程序进行交互操作的可视部分。窗体和控件是创建界面的基本构造模块,也是创建应用程序所使用的对象。窗体和控件是具有自己的属性、方法和事件的对象。我们可以把属性看作是一个对象的性质,把方法看作是对象的动作,把事件看作是对象的响应。8.1VisualBasic程序设计8.1.2 程序设计过程程序设计过程1VisualBasic的编程思想窗体由属性定义其外观,由方法定义其行为,由事件定义其与用户的交互。通过设置窗体属性并编写响应事件的VisualBasic代码,就能定义出满足应用程序需要的对象。控件是包括在窗体对象内的对象。每种类型的控件都有自己的一套属性、方法和事件,以适用于特定的目的。一些控件最适合在应用程序中输入或显示文本;另一些控件能够访问其他的应用程序和处理数据,就像这些远程应用程序是用户自己的代码一样。8.1VisualBasic程序设计8.1.2 程序设计过程程序设计过程1VisualBasic的编程思想在利用窗体和控件为应用程序建立界面之后就需要编写代码,定义应用程序的特性。而编写代码主要是在响应事件的过程中添加,通过获取、设置或更改对象的属性,使用对象的方法,或是给其他对象发送消息以引发其事件。8.1VisualBasic程序设计8.1.2 程序设计过程程序设计过程1VisualBasic的编程思想应用程序中的典型事件序列:l启动应用程序,装载和显示窗体。l窗体(或窗体上的控件)接收事件。事件可由用户引发(例如键盘操作),可由系统引发(例如定时器事件),也可由代码间接引发(例如,当代码装载窗体时的Load事件)。l如果在相应的事件过程中存在代码,就执行代码。l应用程序等待下一次事件。8.1VisualBasic程序设计8.1.2 程序设计过程程序设计过程2VisualBasic应用程序的结构一个应用程序实际上是指挥计算机完成任务的指令集。应用程序的结构是组织指令的方法,也就是指令存放的位置和指令的执行顺序。由于VisualBasic应用程序是基于对象的,所以应用程序的代码结构就是该程序在屏幕上物理表示的模型。在屏幕上看到的窗体代表属性,这些属性定义了窗体的外观和内在特性。应用程序中的每个窗体都有一个包含其代码的相关的窗体模块(文件扩展名为.FRM)。8.1VisualBasic程序设计8.1.2 程序设计过程程序设计过程2VisualBasic应用程序的结构用类模块(文件扩展名为.CLS)创建对象,这些对象可被应用程序内的过程调用。标准模块只包含代码,而类模块既包含代码又包含数据,可视为没有物理表示的控件。8.1VisualBasic程序设计8.1.2 程序设计过程程序设计过程3一个简单的应用程序显示一个窗口,窗口的标题是“我的媒体播放机”,在窗口内用3号隶书显示“欢迎来到VB世界!”启动VisualBasic,并选择建立标准EXE,进入VisualBasic6.0编程环境。在建立的项目中,有一个窗口Form1,可以通过属性窗口看到它的Caption(标题)属性为“Form1”,把它改为“我的媒体播放机”。8.1VisualBasic程序设计8.1.2 程序设计过程程序设计过程3一个简单的应用程序对Form1的Load事件添加代码:PrivateSubForm_Load()Font.Name=隶书FontSize=15.75Print欢迎来到VB世界!EndSub8.1VisualBasic程序设计8.1.2 程序设计过程程序设计过程3一个简单的应用程序Caption属性也可以在Load事件中直接添加:PrivateSubForm_Load()Me.Caption=我的媒体播放机Me.Font.Name=隶书Me.FontSize=15.75Me.Print欢迎来到VB世界!EndSub8.1VisualBasic程序设计8.1.3 控件的使用控件的使用VisualBasic中的控件可分为两类:标准控件和ActiveX控件,标准控件是VisualBasic内部自带的工具箱。ActiveX控件是VisualBasic工具箱的扩充部分。使用ActiveX控件的方法与使用其他标准控件完全一样。在程序中加入ActiveX控件后,它将成为开发和运行环境的一部分,并为应用程序提供新的功能。ActiveX控件通常以.OCX文件的方式提供。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用1标准控件(1)Label(标签)Label控件主要用来显示一些标题或说明的文本,用户不能直接修改显示文本。在Label中实际显示的文本是由Caption属性决定的,该属性可以在设计时设置或在运行时用代码赋值。在默认情况下,Label惟一的可见部分是标题文本,你还可以通过其他属性的设置来更改标签的外观。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用1标准控件(2)TextBox(文本框)TextBox控件是一个文本编辑控件,可以在运行时由用户输入、编辑或显示文本,实际上是一个简单的文本编辑器。TextBox控件中显示的实际文本是与Text属性对应的。Text属性可以用三种方式设置:设计时在“属性”窗口进行、运行时通过代码设置或在运行时由用户编辑。通过读Text属性能在运行时获得TextBox控件的当前内容。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用1标准控件(3)PictureBox(图片框)PictureBox控件可以显示来自位图、图标或者元文件,以及来自增强的元文件、JPEG或GIF文件的图形。如果控件不足以显示整幅图像,则裁剪图像以适应控件的大小。把要显示的图片放到PictureBox控件内有两个方法:一是在程序设计阶段在属性窗口中用鼠标点击Picture属性,在弹出的对话框中选择你所需要的图形文件。二是在程序运行阶段用函数加载图形,形如:PictureBox1.Picture=LoadPicture(图形文件路径)8.1VisualBasic程序设计8.1.3 控件的使用控件的使用1标准控件(4)Image(图像框)Image控件用来显示图形。Image控件可以显示来自位图、图标或元文件的图形,也可以显示增强的元文件、JPEG或GIF文件。因为Image控件使用较少的系统资源,所以重画起来比PictureBox控件要快,但是它只支持PictureBox控件的一部分属性、事件和方法。用Stretch属性确定是否缩放图形来适应控件大小,反之亦然。虽然可以把Image控件放在容器里,但是Image控件不能作为容器。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用1标准控件(5)ListBox(列表框)ListBox控件用来显示项目列表,可以是单项选择或多项选择,由MultiSelect属性决定。如果项目总数超过了可显示的项目数,就自动在ListBox控件上添加滚动条。如果未选定项目,则ListIndex属性值是-1。列表的第一项是ListIndex0,ListCount属性值总是比最大的ListIndex值大1。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用1标准控件(6)ComboBox(组合框)ComboBox控件将TextBox控件和ListBox控件的特性结合在一起:既可以在控件的文本框部分输入信息,也可以在控件的列表框部分选择一项。AddItem或RemoveItem方法用来添加或删除ComboBox控件中的项目。通过设置或读取List、ListCount、和ListIndex属性,用来访问ComboBox中的项目。也可以在设计时使用List属性将项目添加到列表中。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用1标准控件(7)Frame(框架)Frame控件可以为控件提供可标识的分组。Frame可以实现在功能上分割一个窗体。要用Frame控件将窗体内控件分组,首先要绘制Frame控件,然后绘制Frame里面的控件。这样就可以把框架和里面的控件同时移动。如果在Frame外部绘制了一个控件并试图把它移到框架内部,那么控件将在Frame的上部,这时需分别移动Frame和控件。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用1标准控件(8)CommandButton(命令按钮)CommandButton控件用来在单击时执行指定的操作。控件上的显示文本,由Caption属性设置。为了在按ENTER键时也选中命令按钮,需将其Default属性设为True。为了能在按ESC键时也选中CommandButton,则需将Cancel属性设置成True。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用1标准控件(9)OptionButton(单选框)OptionButton控件用来实现让用户从成组项目选择中只能选择其中一个。主要属性是Value,选定控件时值为True,否则为False。通常用Frame或PictureBox来实现分组。(10)CheckBox(复选框)CheckBox控件用来实现让用户从成组项目中选择的一个或几个选项。主要属性是Value,未选状态时值为0,选择时值为1,若将其设2,则控件变灰色。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用2ActiveX控件应用程序添加ActiveX控件后,它将成为开发和运行环境的一部分,并为应用程序提供新的功能。其使用方法与使用其他标准内装的控件完全一样。CommonDialog控件提供一组标准的操作对话框,用来进行诸如打开和保存文件、设置打印选项、以及选择颜色和字体等操作。DialogTitle属性可以设置对话框的标题。使用ShowOpen和ShowSave方法可显示“打开”和“另存为”对话框。两个对话框均可用以指定驱动器、目录、文件扩展名和文件名。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用2ActiveX控件除对话的标题不同外,另存为对话外观上与打开对话相似。运行时,当用户选择一个文件“关闭”对话框时,FileName属性既为选定的文件名。可以通过设置Filter属性,让对话框只显示某种文件类型。Flags属性可用来改变对话的元素,当覆盖文件之类的动作发生时,还可用来提示用户。使用ShowFont方法可显示“字体”对话框。使用ShowColor方法可显示“颜色”对话框。使用控件的ShowPrinter方法可显示“打印”对话框。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用3在媒体播放机中实现文件选择功能实现自己的媒体播放机,其选择文件并打开的功能,我们利用CommonDialog控件来实现。首先要在窗口中加入一个CommonDialog控件。选择“工程”“部件”菜单,出现部件窗口,在“控件”卡片中找到MicrosoftCommonDialogControl6.0并选中它。选中后按“确定”按钮,这时CommonDialog控件的图标就在工具箱中了。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用3在媒体播放机中实现文件选择功能在窗口中放置两个控件,一个命令按钮,一个CommonDialog控件。可以将命令按钮的Name属性设为Bt1,CommonDialog控件的Name属性设为设为OpenDlg。对象的命名可以自由选择,但是要注意你应有比较固定的风格,要使以后再看到该对象时就能大致知道它的名字,或者由名字就知道对应的是哪一个控件,并且知道它是用来干什么用的等等,这样才能提高编程的效率。8.1VisualBasic程序设计8.1.3 控件的使用控件的使用3在媒体播放机中实现文件选择功能在命令按钮的Click事件中添加如下代码:PrivateSubBt1_Click()OpenDlg.DialogTitle=请选择要播放的媒体文件OpenDlg.Filter=“音频文件(*.wav)|*.wav|所有文件(*.*)|*.*OpenDlg.ShowOpenIfOpenDlg.FileNameThen播放媒体的代码放在下面EndIfEndSub8.1VisualBasic程序设计8.1.4 菜单设计菜单设计菜单控件是一个对象,它与其他对象一样,具有定义它的外观与行为的属性。在设计或运行时可以设置Caption属性、Enabled和Visible属性、Checked属性以及其他属性。菜单控件只包含一个事件,即Click事件,当用鼠标或键盘选中该菜单控件时,将调用该事件。8.1VisualBasic程序设计8.1.4 菜单设计菜单设计1使用菜单编辑器在VisualBasic中设计菜单非常容易,先选中你要添加菜单的Form窗体,然后在工具条上点击“菜单编辑器”按钮便可以打开“菜单编辑器。菜单控件在菜单控件列表框中的位置决定了该控件是菜单标题、菜单项、子菜单标题,还是子菜单项。8.1VisualBasic程序设计8.1.4 菜单设计菜单设计2为媒体播放机添加菜单我们现在可以为我们的媒体播放机设计一个大体的框架了。首先启动VisualBasic,并打开我们前面保存的工程。选中frmMain,并点击“菜单编辑器”按钮来设计菜单。要注意我们必须为每一个菜单项定义一个名字。在菜单结构里,不妨将菜单项的名字依次定义为menuFile,menuOpen,menu001,menuExit,menuHelp,menuContent,menu002,menuAbout。设置好后按确定按钮。8.1VisualBasic程序设计8.1.4 菜单设计菜单设计2为媒体播放机添加菜单首先把原来bt1的功能转移到menuOpen上去,先把bt1的Click事件的代码复制到menuOpen的Click事件。PrivateSubmenuOpen_Click()OpenDlg.DialogTitle=请选择要播放的媒体文件OpenDlg.Filter=音频文件(*.wav)|*.wav|所有文件(*.*)|*.*OpenDlg.ShowOpenIfOpenDlg.FileNameThen播放媒体的代码放在下面EndIfEndSub然后删除bt1的Click事件的代码并删除bt1命令按钮8.1VisualBasic程序设计8.1.4 菜单设计菜单设计2为媒体播放机添加菜单为程序添加一个About窗口。点击工具条的“添加窗口”按钮或菜单“工程”“添加窗体”,则显示添加窗体对话框。你可以选择“窗体”类型,然后自己设计About窗口,但更简单的是选择“关于对话框类型”。选定后按打开按钮。新添加的About窗口的名字为frmAbout,我们先把它与“帮助”“关于播放器”菜单项menuAbout联系起来。在menuAbout的click事件中添加代码如下:PrivateSubmenuAbout_Click()frmAbout.Show1EndSub8.1VisualBasic程序设计8.1.4 菜单设计菜单设计2为媒体播放机添加菜单Show是窗体对象的方法,用来显示窗体,它有两个参数表示显示方式。我们这里只用了第一个。1表示将窗体显示为模式对话框,如果你想显示为无模式对话框,可以不用参数。8.1VisualBasic程序设计8.2.1 媒体控制接口媒体控制接口MCI(MediaControlInterface)是Microsoft公司为实现Windows系统下设备无关性而提供的媒体控制接口标准。MCI是一个高级的函数调用接口,它包含在MMSYSTEM.DLL中,用来协调事件以及MCI设备驱动程序间的通信。利用MCI,多媒体应用程序可以控制各种各样的多媒体设备和文件。8.2使用媒体控制接口(MCI)8.2.1 媒体控制接口媒体控制接口MCI可以分为简单设备和复合设备两种。简单设备是一种使用时不必指定相关媒体文件的设备,例如用CDROM播放音频光盘时系统打开的就是简单设备。而复合设备是一种播放那个特定媒体文件(称为设备元素)的设备,例如MIDI音序器、MPEG文件解压播放等。如果你想使用这一类符合复合设备,则必须提供相应的MIDI或MPEG文件名。8.2使用媒体控制接口(MCI)8.2.1 媒体控制接口媒体控制接口设备名是在注册表或SYSTEM.INI的mci部分定义的,典型的mci段如下所示:mcicdaudio=mcicda.drvsequencer=mciseq.drvwaveaudio=mciwave.drvavivideo=mciavi.drvvideodisc=mcipionr.drv等号的左边是设备名,右边是对应的MCI驱动程序。当安装了新的MCI驱动程序时,系统要用不同的设备名来区分。设备名通常与驱动程序中的设备类型名相同,如cdaudio和waveaudio等,也有例外,如avivideo设备是一个digitalvideo类型的设备。8.2使用媒体控制接口(MCI)8.2.2 MCI指令及使用指令及使用使用MCI设备一般包括打开、使用和关闭三个过程。MCI的大部分命令可以控制不同的媒体设备。MCI指令的一般格式为:8.2使用媒体控制接口(MCI)8.2.2 MCI指令及使用指令及使用1打开和关闭多媒体设备使用多媒体设备之前首先要用Open指令将它启动。Open指令的语法如下:Open可以是设备名也可以是文件名,主要取决于设备是简单设备还是复合设备。对于简单设备只需要设备名就可以了。例如Opencdaudio对于复合设备则需要指名使用的文件。如:Openc:windowsWellcome.midaliasMyDev1用Close指令关闭打开的设备。命令格式为:Close例如:CloseMyDev18.2使用媒体控制接口(MCI)8.2.2 MCI指令及使用指令及使用2播放多媒体设备Play指令是用来播放多媒体设备的。命令格式为:Play如果不使用参数,则多媒体设备将从当前位置播放到文件结束为止。如果要指定播放的起始和终止位置,则一般用frompos1topos2。例如:Playcdaudiofrom2000to5000指示播放激光唱盘从第2000毫秒到15000毫秒的位置。Playavivideofullscreenfrom10to500指示播放AVI全屏显示,从第10帧到500帧。8.2使用媒体控制接口(MCI)8.2.2 MCI指令及使用指令及使用3获取多媒体设备信息获取多媒体设备信息的指令有capacility,info,status指令。例如:capacilitycdaudiocaneject查询CD-ROM是否有弹出设备的能力。Infowaveaudiofile查询波形设备正使用的文件。StatusDigitalVideospeed查询数字视频播放的速度。8.2使用媒体控制接口(MCI)8.2.2 MCI指令及使用指令及使用4寻找指定位置Seek指令用来寻找到多媒体设备的指定位置。例如:SeekDigitalVideoto3000将数字视频定位到3000帧的位置。Seekcdaudiotostart将播放激光唱盘定位到起始位置。SeekDigitalVideotoend将数字视频定位到结束位置。8.2使用媒体控制接口(MCI)8.2.2 MCI指令及使用指令及使用5暂停和继续pause指令可以中止媒体的播放,用resume指令继续播放由pause指令中止的媒体。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件MultimediaMCI控件用来管理媒体控制接口(MCI)设备上的多媒体文件的记录与回放。从概念上说,这种控件就是一组按钮,它被用来向诸如声卡、MIDI序列发生器、CD-ROM驱动器、视频CD播放器和视频磁带记录器及播放器等设备发出MCI命令。MCI控件还支持Windows视频文件(.avi)的回放。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件1MultimediaMCI控件的使用单击菜单条上“工程”“部件”菜单,在出现的部件窗口中选择MicrosoftMultimediaControl6.0,并单击“确定”按钮,这时会在工具栏中出现该控件的图标。在设计时,将MultimediaMCI控件加到一个窗体上:8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件1MultimediaMCI控件的使用8.2使用媒体控制接口(MCI)按钮被分别定义为Prev(前移)、Next(后移)、Play(播放)、Pause(暂停)、Back(倒移)、Step(步进)、Stop(停止)、Record(录制)和Eject(退出)。8.2.3 Multimedia MCI 控件控件1MultimediaMCI控件的使用在允许用户对MCI控件进行操作之前,应用程序必须先将MCI设备打开,并在MCI控件上启用适当的按钮。如果想使用MCI控件中的按钮,要将Visible和Enabled属性设置为True。如果不想使用控件中的按钮,而只是想用MCI控件的多媒体功能,可将Visible和Enabled属性设置为False。MCI控件的事件(按钮定义)是可编程的,通过开发按钮事件代码,可以增加甚至完全重新定义按钮的功能。MCI能在单个窗体中支持多个MCI控件实例,这样就可以同时控制多台MCI设备,但是要注意,每台设备需要一个相对应的MCI控件。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件2.常用的MCI控件属性(1)AutoEnable属性AutoEnable属性用来决定MCI控件是否能够自动启动或关闭控件中的某个按钮。如果AutoEnable属性被设置为True,MCI控件就启用指定MCI设备类型在当前模式下所支持的全部按钮。这一属性还会禁用那些MCI设备类型在当前模式下不支持的按钮。ButtonVisible属性ButtonVisible属性用来决定某按钮在MCI控件中是否可见。例如如果编写CD-Play,那么我们不需要Record按钮,于是可以设置为:MMControl1.RecordVisible=False8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件2.常用的MCI控件属性(2)Command属性在设计时,该属性不可用。语法为:控件的名称.Command=命令字符串该属性指定将要执行的MCI命令,其中命令字符串可以是Open,Close,Play,、Pause,Stop,Back,Step,Prev,Next,Seek,Record,Eject,Sound或Save。这些命令被立即执行,并将错误代码存放在Error属性中。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件2.常用的MCI控件属性(3)DeviceType属性指定要打开的MCI设备的类型,语法为:控件的名称.DeviceType=设备类型其中设备类型可以是AVIVideo,CDAudio,MMMovie,WaveAudio等。打开简单设备时,该属性必须设置。如果文件的扩展名没有指定将要使用的设备,那么打开复杂MCI设备时也必须设置该属性。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件2.常用的MCI控件属性(4)FileName属性FileName属性指定Open命令将要打开的或者Save命令将要保存的文件。语法为:控件的名称.FileName=完整路径文件名如果在运行时要改变FileName属性,就必须先关闭然后再重新打开设备。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件2.常用的MCI控件属性(5)Mode属性Mode属性用来返回打开的MCI设备的当前状态。设计时不可用,运行时是只读的。例如属性值为mciModeNotOpen表示设备没有打开;mciModePlay表示设备正在播放;mciModeReady表示设备准备好等等。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件2.常用的MCI控件属性(6)TimeFormat属性该属性规定用来报告所有位置信息的时间格式。例如当设置为0时是以微秒为单位,为3时是以帧为单位等等。按当前设置格式访问或发送信息的属性有:From、Length、Position、Start、To、TrackLength、TrackPosition。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件2.常用的MCI控件属性(7)Wait属性决定MCI控件是否要等到下一条MCI命令完成才能将控件的控制权返回应用程序,在设计时,该属性不可用。Wait属性取值说明如下:False:MCI不须要等到MCI命令完成就可将控件的控制权返回应用程序。默认值。True:MCI必须等到下一个MCI命令完成才能将控件的控制权返回应用程序。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件3.常用的MCI控件的事件(1)ButtonClick事件当用户在多媒体MCI控制的按钮上按下或释放鼠标时产生该事件,每一个Buttonclick事件默认执行一个MCI命令。(2)ButtonCompleted事件当多媒体MCI控制按钮激活的MCI命令完成后发送。(3)StatusUpdate事件这个事件可监测目前多媒体设备的状态信息,比如用滚动条来表示当前轨道的位置。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件4为媒体播放机增加播放功能在设计窗口中添加一个MultimediaMCI控件,并命名为Mmci,再添加一个PictureBox控件,命名为Winout,将用它作为视频播放的窗口。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件4为媒体播放机增加播放功能修改menuOpen的Click事件的代码如下:PrivateSubmenuOpen_Click()OpenDlg.DialogTitle=请选择要播放的媒体文件OpenDlg.Filter=“音频文件(*.wav,*.mp3)|*.wav;*.mp3|视频文件(*.avi,*.mpg)|*.avi;*.mpg|所有文件(*.*)|*.*OpenDlg.ShowOpenIfOpenDlg.FileNameThen播放媒体的代码放在下面Mmci.FileName=OpenDlg.FileName如果设备已经打开,则关闭它。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件4为媒体播放机增加播放功能IfMmci.ModemciModeNotOpenThenMmci.Command=CloseEndIf打开设备Mmci.Command=Open判断设备是否需要显示窗口,若需要,则设置为WinoutIfMmci.UsesWindowsThenMmci.hWndDisplay=Winout.hWndEndIfEndIfEndSub8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件4为媒体播放机增加播放功能用一个slider控件作为进度器。选择“工程”“部件”菜单命令,在出现的部件窗口中选择MicrosoftWindowsCommonControls6.0,并单击“确定”按钮,这时会在工具栏中出现该slider控件的图标。我们在frmMain窗口上添加一个slider控件,就用默认名字slider1把Back,Eject,Next,Prev,Record,Step等按钮设为不可见。在MCI控件的Done,StatusUpdate事件以及Slider1的Scroll事件中添加代码以关联媒体设备的位置和Slider1的Value属性。8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件4为媒体播放机增加播放功能PrivateSubForm_Load()以毫秒为单位Mmci.TimeFormat=0Mmci.Notify=TrueEndSubPrivateSubForm_Unload(CancelAsInteger)别忘了关闭设备Mmci.Command=CloseEndSubPrivateSubmenuAbout_Click()frmAbout.Show1EndSub8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件4为媒体播放机增加播放功能PrivateSubmenuOpen_Click()OpenDlg.DialogTitle=请选择要播放的媒体文件OpenDlg.Filter=音频文件(*.wav,*.mp3)|*.wav;*.mp3|视频文件(*.avi,*.mpg)|*.avi;*.mpg|所有文件(*.*)|*.*OpenDlg.ShowOpenIfOpenDlg.FileNameThen播放媒体的代码放在下面Mmci.FileName=OpenDlg.FileName如果设备已经打开,则关闭它。IfMmci.ModemciModeNotOpenThenMmci.Command=CloseEndIf打开设备Mmci.Command=Open8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件4为媒体播放机增加播放功能判断设备是否需要显示窗口,若需要,则设置为WinoutIfMmci.UsesWindowsThenMmci.hWndDisplay=Winout.hWndEndIf用媒体的总长度设置Slider1的MaxSlider1.Max=Mmci.LengthEndIfEndSub8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件4为媒体播放机增加播放功能PrivateSubMmci_Done(NotifyCodeAsInteger)如果MCI正常完成,把位置定位到0IfNotifyCode=1ThenMmci.To=0Mmci.Command=SeekEndIfEndSubPrivateSubMmci_StatusUpdate()媒体改变位置时,改变Slider1的值Slider1.Value=Mmci.PositionEndSubPrivateSubSlider1_Scroll()Slider1发生改变时,对媒体重新定位Mmci.To=Slider1.ValueMmci.Command=SeekEndSub8.2使用媒体控制接口(MCI)8.2.3 Multimedia MCI 控件控件4为媒体播放机增加播放功能给程序增加播放VCD的功能。首先在菜单中添加“文件”“播放vcd”“没有光驱”,其中“播放vcd”的命名为menuPlayVcd,“没有光驱”命名为menuCDROM并设其索引(index)属性为0,这样“没有光驱”便成为一个菜单数组。另外,再在frmMain窗口中添加一个ListBox控件,其名字就用List1,Lis