Windows Media Player控件的主要属性有:
1.AutoRewind:在播放完一个文件后,是否将指针返回到该文件的开始,默认值为False。
2.AutoSize:如果该控件定义的区域小于动画的大小,则在运行时该控件是否会自动根据视频动画的大小设置自身的大小。默认值为False。
3.AutoStart:是否在启动窗体的同时,就运行文件。默认值为True。
4.ClickToPlay:在控件上单击时,是否开始播放文件,默认值为True。当取值True时,在正处于播放状态的控件上单击,会暂停播放,再次单击,会继续播放。
5.Display Mode:取0-mpTime时,显示模式是时间;取1-mpFrames时,显示模式为帧。
6.EnableTracker:是否允许调整播放进度,默认值为True。
7.FileName:保存要播放的文件名及其路径。
8.Mute:在播放期间是否禁声,默认值为False。
9.PlayCount:保存循环播放的次数。
10.ShowAudioControls:是否显示音量调节按钮,默认值为True。
11.ShowControls:是否显示播放控制栏,默认值为True。
12.ShowStatusBar:是否显示状态栏,默认值为True。
Windows Media Player控件有4种基本操作方法:Open、Play、Pause、Stop方法。在使用该控件时,可用Open方法打开多媒体文件,用Play方法进行播放,用Pause或Stop方法停止播放。
新建一个窗体,设置其MaxButton属性为False。在上面画一个组合框,设置其Style属性为2-Dropdown List,画五个命令按钮,一个通用对话框(Common Dialog)控件,一个媒体播放器(Windows Media Player)控件,其布局如图9-10所示。

图9-10 媒体播放器设计界面
注意:工具箱中默认没有通用对话框和媒体播放器控件,添加这两个控件的方法为:单击“工程”菜单的“部件”命令,在弹出的“部件”对话框中选择“控件”选项卡,向下拖动滚动条,找到这两个ActiveX控件,选中它们,如图9-11所示,单击【确定】即可。

图9-11 选择媒体播放器控件
在其代码窗口中输入如下代码:
Option Explicit
Private Declare Function GetSystemDirectory Lib "Kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long '返回windows\system所在的文件夹
Private WinSysPath As String
Private SelectFName(1000) As String
Private SelectNum As Integer, NextPlaying As Integer
Private PreviousPath As String '此变量保存用户上次选择的目录,以便再次启动播放器,单击打开时,直接显示的是上次用户打开的目录,此变量的值保存在Windows的注册表中
Private Sub Form_Load()
Dim Tmp1 As String
Dim tmp2 As Integer
Me.Caption = "一个简单的媒体播放器"
Command1.Caption = "打开":Command2.Caption = "停止":Command3.Caption = "退出"
Command2.Enabled = False:Command4.Caption = "上一首&P"
Command5.Caption = "下一首&N":MediaPlayer1.AutoRewind = True
MediaPlayer1.AutoStart = True:MediaPlayer1.ShowStatusBar = True
MediaPlayer1.ShowDisplay = True:MediaPlayer1.AutoSize = False
Combo1.Locked = False
'下面的GetSetting,若存在LastPath项的值,则返回其值,否则返回NoData
PreviousPath = GetSetting("ShinMountain", "PlayMp3", "LastPath", "NoData")
'GetSetting语句从Windows注册表中的应用程序项目返回注册表项设置值。
'DeleteSetting语句在Windows注册表中,从应用程序项目里删除区域或注册表项设置。
'DeleteSetting "ShinMountain"此句可以删除ShinMountain项
'SaveSetting语句在Windows注册表中保存或建立应用程序项目。
'这些数据保存在hkey_current_user\software\VB and VBA programs settings下面
'以下代码将上次选择的多媒体文件(保存在WinSysPath中)读出来,放SelectFName数组中,并开始播放
Tmp1 = Space(260)
tmp2 = GetSystemDirectory(Tmp1, Len(Tmp1))
WinSysPath = Left(Tmp1, tmp2)
WinSysPath = WinSysPath + "\Inventory.DLL" 'Inventory.DLL文件保存正在播放文件的列表。
On Error GoTo Errhandler 'Inventory.DLL文件不存在,会触发此事件,一般第一次运行时会出现这种情况
SelectNum = 0
NextPlaying = -1
Open WinSysPath For Input As #1
Do While Not EOF(1)
Line Input #1, SelectFName(SelectNum)
Combo1.AddItem Mid(SelectFName(SelectNum), InStrRev(SelectFName(SelectNum), "\") + 1)
SelectNum = SelectNum + 1
Loop
Close #1
MediaPlayer1_EndOfStream (0&)
Errhandler:
If Combo1.ListCount = 0 Then '可能是第一次运行此软件,Inventory.DLL文件还不存在,或一个文件也没有
Combo1.List(0) = "没有可选项目"
End If
Combo1.ListIndex = 0 '让list数组中第一个显示在文本框中
End Sub
Private Sub Command1_Click()
Dim FName As String
Dim i As Integer, j As Integer
Dim ThePath As String
Dim Tmp As String
CommonDialog1.CancelError = True
On Error GoTo Errhandler
CommonDialog1.Flags = cdlOFNAllowMultiselect '允许多选,所有选择的文件名之间用空格分隔,保存在FileName中
CommonDialog1.InitDir = IIf(PreviousPath = "NoData", "C:\WINDOWS", PreviousPath)
CommonDialog1.Filter="*.mpeg|*.mpeg|*.mpg|*.mpg|*.avi|*.AVI|*.wav|*.WAV|*.mid|*.MID|*.mp3|*.MP3|*.mov|*.MOV|*.dat|*.DAT|*.RMI|*.rmi|*.*|*.*" '设置扩展名
CommonDialog1.MaxFileSize = 32767 '当同时选择许多文件时默认的260放不下,故要大点,这是最大的值
CommonDialog1.ShowOpen:FName = CommonDialog1.FileName
'下面将选择的若干文件名分开,放在数组SelectFName中
If InStr(FName, Chr(32)) = 0 Then '若只选择一个文件,FName中没有空格,否则文件名之间用空格分隔,若文件在根目录,则路径形如E:\,否则形如E:\abc\123
SelectNum = 1:SelectFName(0) = FName
'InStrRev函数是从尾部开始搜索
ThePath = Left(FName, InStrRev(FName, "\") - 1)
Else
ThePath = Left(FName, InStr(FName, Chr(32)) - 1) + "\"
FName = Mid(FName, InStr(FName, Chr(32)) + 1)
SelectNum = 0:j = 1:Tmp = Space(0)
For i = 1 To Len(FName)
If Mid(FName, i, 1) = Chr(32) Then
SelectFName(SelectNum) = ThePath + Tmp
SelectNum = SelectNum + 1:Tmp = Space(0)
Else
Tmp = Tmp + Mid(FName, i, 1)
End If
Next i
SelectFName(SelectNum) = ThePath + Tmp:SelectNum = SelectNum + 1
End If
'分隔结束
Combo1.Clear
For i = 0 To SelectNum - 1 '此循环将选中的文件显示在组合框中
Combo1.AddItem Mid(SelectFName(i), InStrRev(SelectFName(i), "\") + 1)
Next i
Combo1.ListIndex = 0 '让list数组中第一个显示在文本框中
NextPlaying = 0:Me.Caption = Combo1.Text:MediaPlayer1.FileName = SelectFName(0)
SaveSetting "ShinMountain", "PlayMp3", "LastPath", ThePath
Exit Sub
Errhandler:
Exit Sub
End Sub
Private Sub Command2_Click()
If Command2.Caption = "停止" Then
Command2.Caption = "开始":MediaPlayer1.Stop
Else
Command2.Caption = "停止":MediaPlayer1.Play
End If
End Sub
Private Sub Command3_Click()
'退出之前,将用户选中的文件保存起来,以便下一次启动该程序时,可以直接从保存时的文件开始继续播放,为了做到这一点,在将播放列表写入文件时,必须让正在播放的那个文件首先写入文件中,然后是它后面的,到底后再绕回来,按这个顺序写入。因为程序启动后,是按文件中的列表顺序从前向后进行播放的,故每次启动都首先播放的是退出之前播放的那个文件。
Dim Tmp1 As Integer
On Error GoTo Errhandler '一旦文件不存在,会触发此事件
Tmp1 = 0
Open WinSysPath For Output As #1
Do While Tmp1 < SelectNum
Print #1, SelectFName(NextPlaying)
Tmp1 = Tmp1 + 1:NextPlaying = (NextPlaying + 1) Mod SelectNum
Loop
Close #1
Errhandler:
Unload Me
End Sub
Private Sub Command4_Click()
NextPlaying = IIf(NextPlaying - 1 < 0, SelectNum - 2, NextPlaying - 2)
MediaPlayer1_EndOfStream (0&)
End Sub
Private Sub Command5_Click()
MediaPlayer1_EndOfStream (0&)
End Sub
Private Sub Combo1_Click()
NextPlaying = Combo1.ListIndex – 1:MediaPlayer1_EndOfStream (0&)
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Command3_Click
End Sub
Private Sub MediaPlayer1_EndOfStream(ByVal Result As Long) '播放文件结束时触发此事件
On Error GoTo Errhandler '接下来要播放的文件一旦不存在,会触发此事件,这样做是为了防止程序遇到意外时不至于崩溃,只是忽略这个错误,程序可以继续运行下去
NextPlaying = (NextPlaying + 1) Mod SelectNum
MediaPlayer1.FileName = SelectFName(NextPlaying)
Combo1.ListIndex = NextPlaying:Me.Caption = Combo1.Text
Command2.Enabled = True:Command2.Caption = "停止"
Errhandler:
Exit Sub
End Sub
运行此窗体,其初始界面如图9-1所示。此程序的功能介绍可参见本章的项目界面及其要求部分,这里不再赘述。
简答题
1.Animation控件能播放哪几种格式的多媒体文件?
2.AVI动画由什么组成?
3.Animation控件有哪些常见的属性?
4.Multimedia MCI控件能播放MP3文件吗?
5.简述Multimedia MCI控件上各按钮的功能。
6.怎样打开关闭Multimedia MCI控件所控制的多媒体设备?
7.什么是MCI命令?怎样发送MCI命令?
8.如何在VB的工具箱上显示Multimedia MCI控件的图标?
9.Multimedia MCI控件有哪些常见的属性?
10.Multimedia MCI控件有哪些事件?
11.ActiveMovie控件支持哪些文件格式?
12.Windows Media Player控件能播放RM格式的流媒体文件吗?
13.Windows Media Player控件有哪些常见的属性?
14.试比较本章介绍的四个控件的异同。