资源描述
第03讲 媒体播放器本章介绍了媒体播放控件(Windows Media Player)的常用属性和方法,并且利用它设计一个简单的媒体应用程序媒体播放器。该媒体播放器可以播放Wave、AVI、MIDI和mp3等格式的文件。Windows Media Player控件的引入使得在Visual C# 2005环境下制作多媒体应用程序变得非常的简单,只需要编写几行简单的代码,就可以达到播放多媒体文件的目的。本章学习目标:(1)理解Windows Media Player控件的常用属性。(2)学会使用Windows Media Player、Button、Panel、ListBox等控件设计多媒体播放器程序。(3)通过本章实例,进一步掌握Visual C# 2005较小型的Windows应用程序开发的基本思想。3.1 Windows Media Player控件Windows Media Player控件主要用于管理多媒体文件的记录与回放,从概念上说,该控件就是一个完整的媒体播放器,它支持Wave、AVI、MIDI和mp3等格式。3.1.1 添加Windows Media Player控件Windows Media Player控件不在默认的工具箱中,在设计多媒体应用程序之前,需要将此控件添加到工具箱中,按以下步骤进行:(1)在工具箱中单击右键,弹出如图3-1所示菜单。图3-1 添加控件(2)单击【选择项】菜单命令,弹出如图3-2所示的【选择工具箱项】对话框。图3-2 【选择工具箱项】对话框(3)打开【COM组件】选项卡,并选中Windows Media Player组件复选框,然后单击【确定】按钮,则该控件被添加到工具箱中,如图3-3所示。图3-3 添加控件后的工具箱3.1.2 Windows Media Player控件简介在设计多媒体应用程序时,跟添加其他控件一样,将Windows Media Player控件添加到窗体上,它在窗体上的外观如图3-4所示。图3-4 媒体播放器控件的外观从图中可以看出,最上面的是显示窗口,用于显示媒体文件播放画面,窗口下面是进度条,进度条下面是播放按钮和音量控制滑竿,从左至右依次为:播放、停止、前一个、后一个、音量开关按钮和音量调节器。媒体播放器控件的常用属性有:(1)AllowDrop:允许拖动。(2)ContextMenuStrip:允许用户自定义弹出菜单。(3)fullScreen:用于设置是否全屏显示。(4)Visible:是否可见。(5)PlayState:用于获取媒体播放器的工作状态。(6)URL:用于设置媒体播放器播放的路径或地址。使用媒体播放器播放多媒体文件的方法非常简单,例如:/*MediaPlayer.URL = D:国歌.mp3; / 播放D盘上的国歌.mp3/*停止播放的代码为:/*MediaPlayer.URL = ; / 设为空字符串即停止播放/*下面用一个媒体播放器实例来介绍如何设计一个完整的媒体播放软件。3.2 界面设计及属性设置本节介绍媒体播放器的用户界面设计以及窗体和窗体上各控件的属性设置。3.2.1 界面设计新建一个Windows应用程序,在窗体上依次放置ListBox、Windows Media Player、Panel和8个Button控件,如图3-5所示(设置好属性后)。再为窗体添加一个OpenFileDialog控件、一个FolderBrowserDialog控件和一个Timer控件,它们的作用分别是:(1)OpenFileDialog控件:用于打开单个文件。(2)FolderBrowserDialog控件:用于添加媒体文件目录。(3)Timer控件:用于控制连续播放媒体文件。添加完上述三个控件后,可以看到窗体设计器下方的组件板上出现了这三个组件,如图3-5所示(设置好属性后)。图3-5 媒体播放器用户界面3.2.2 属性设置窗体和各控件的属性设置如表3-1所示。表3-1 窗体和各控件的属性控件类型控件名称属性设置结果FormForm1Text媒体播放器StartPositionCenterScreenMaximizeBoxFalseAutoSizeModeGrowAndShrinkWindows Media PlayerWindows Media Player1NamemediaPlayerListBoxListBox1NamelstFileListOpenFileDialogOpenFileDialog1NameodlgMediaFolderBrowserDialogFolderBrowserDialog1NamefbdlgMediaTimerTimer1NametmrMediaPanelPanel1BorderStyleFixed3DButtonButton1NamebtnAddFileText添加歌曲Button2NamebtnAddFilesText添加目录Button3NamebtnDeleteText删除单曲Button4NamebtnPlayText播放Button5NamebtnBackText上一首Button6NamebtnForwardText下一首Button7NamebtnReplayText单曲循环Button8NamebtnStopText停止3.3 编写代码因为媒体播放器需要用到DirectoryInfo、FileInfo等类,所以首先应当引入System.IO命名空间:/*using System.IO;/*接下来在代码的通用段定义以下公共数组和变量:/*string fileList = new string10000; / 定义播放列表数的最大值int numOfMusic; / 选中的媒体文件的索引号int selectOne; / 选中的音乐文件bool playOne = false; / 控制是否循环播放/*添加以下六个方法,分别用于添加单个媒体文件、添加媒体文件目录、删除媒体文件、播放媒体文件、打开和关闭窗体上的按钮。/*/ 添加单个媒体文件的方法/*public void AddFile(string path) if (numOfMusic 10000) numOfMusic += 1; fileListnumOfMusic = path; else MessageBox.Show(不能添加文件!,播放列表已满); /*/*/*/ 添加媒体文件目录的方法/*public void AddFiles(string path,ListBox lstFiles) DirectoryInfo dir = new DirectoryInfo(path); foreach (FileInfo f in dir.GetFiles (*.mp3) AddFile(f.FullName); int i; string strFile = Convert.ToString(numOfMusic); for (i = 1; i = 5 - strFile.Length; i+) strFile += ; strFile = f.Name; lstFileList.Items.Add(strFile); foreach (DirectoryInfo d in dir.GetDirectories() AddFiles(d.FullName, lstFileList); /*/*/*/ 删除单个媒体文件的方法/*public void DelFile(int selectNum) int i; for (i = selectNum; i = numOfMusic - 1; i+) fileListi = fileListi + 1; numOfMusic -= 1;/*/*/*/ 播放媒体文件的方法/*public void Play(int selectNum) mediaPlayer.URL = fileListselectNum; / 播放选中的媒体文件 this.Text = 正在播放 - + lstFileList.SelectedItem.ToString();/*/*/*/ 使部分按钮可用的方法/*public void OpenBtn() btnPlay.Enabled = true; btnBack.Enabled = true; btnForward.Enabled = true;/*/*/*/ 使部分按钮不可用的方法/*public void CloseBtn() btnPlay.Enabled = false; btnBack.Enabled = false; btnForward.Enabled = false; btnStop.Enabled = false; btnReplay.Enabled = false; btnDelete.Enabled = false;/*/*接下来编写窗体的载入(Load)事件代码如下,用于初始化各数据和窗体上各按钮控件的状态。/*/ 窗体的载入事件代码/*private void Form1_Load(object sender, EventArgs e) lstFileList.Items.CopyTo(fileList, 0); / 将列表框(lstFileList)中的列表项全部复制到数组(fileList)中 numOfMusic = 0; / 选中第一个媒体文件 CloseBtn();/*/*为【添加文件】按钮(btnAddFile)的Click事件添加以下代码,添加媒体文件。/*/ 【添加文件】按钮的单击事件代码/*private void btnAddFile_Click(object sender, EventArgs e) int i; odlgMedia.FileName = ; / 设置默认文件名 odlgMedia.InitialDirectory = C:; / 设置默认路径 odlgMedia.Filter = mp3文件|*.mp3|所有文件|*.*; / 设置文件类型 if (odlgMedia.ShowDialog() = DialogResult.OK) string path = odlgMedia.FileName; FileInfo f = new FileInfo(path); AddFile(f.FullName); string strFile = Convert.ToString(numOfMusic); for (i = 1; i 0) OpenBtn(); /*/*再为【添加目录】按钮(btnAddFiles)的Click事件添加以下代码,添加媒体文件目录,实现成批地添加媒体文件。/*/ 【添加目录】按钮的单击事件代码/*private void btnAddFiles_Click(object sender, EventArgs e) fbdlgMedia.SelectedPath = C:; fbdlgMedia.ShowNewFolderButton = true; fbdlgMedia.Description = 请选择媒体文件目录:; fbdlgMedia.ShowNewFolderButton = false; if (fbdlgMedia.ShowDialog() = DialogResult.OK) AddFiles(fbdlgMedia.SelectedPath, lstFileList); if (lstFileList.Items.Count 0) OpenBtn(); /*/*为【删除】按钮(btnDelete)的Click事件添加以下代码,实现从列表框中删除选中的文件。/*/ 【删除单曲】按钮的单击事件代码/*private void btnDelete_Click(object sender, EventArgs e) int i = lstFileList.SelectedIndex; if (lstFileList.SelectedIndex = 0) if (selectOne = lstFileList.SelectedIndex + 1) & (mediaPlayer.URL != ) MessageBox.Show(不能删除正在播放的文件, 错误); else DelFile(i + 1); lstFileList.Items.RemoveAt(i); if (i lstFileList.Items.Count) lstFileList.SelectedIndex = i; else if (lstFileList.Items.Count = 0) CloseBtn(); else lstFileList.SelectedIndex = 0; /*/*编写【播放】按钮(btnPlay)的Click事件代码如下,用于实现播放功能。/*/ 【播放】按钮的单击事件代码/*private void btnPlay_Click(object sender, EventArgs e) if (lstFileList.SelectedIndex 0) lstFileList.SelectedIndex -= 1; else if (lstFileList.SelectedIndex = 0) lstFileList.SelectedIndex = lstFileList.Items.Count - 1; else lstFileList.SelectedIndex = numOfMusic - 1; selectOne = lstFileList.SelectedIndex + 1; Play(selectOne); btnStop.Enabled = true; btnReplay.Enabled = true;/*/*为【下一首】按钮(btnForward)的Click事件添加以下代码,用于实现播放下一首的功能。/*/ 【下一首】按钮的单击事件代码/*private void btnForward_Click(object sender, EventArgs e) if (lstFileList.SelectedIndex 0) lstFileList.SelectedIndex = 0; selectOne = lstFileList.SelectedIndex + 1; Play(selectOne); btnStop.Enabled = true; btnReplay.Enabled = true;/*/*为【单曲循环】按钮(btnReplay)的Click事件添加以下代码,单击此按钮实现“循环/停止循环”播放的功能。/*/ 【单曲循环】按钮的单击事件代码/*private void btnReplay_Click(object sender, EventArgs e) if (playOne = true) playOne = false; btnReplay.FlatStyle = FlatStyle.Standard; / 设置按钮外观为三维 btnReplay.Text = 单曲循环; else playOne = true; btnReplay.FlatStyle = FlatStyle.Popup; / 设置按钮外观为平面显示 btnReplay.Text = 取消循环; lstFileList.SelectedIndex = selectOne - 1;/*/*为【停止】按钮(btnStop)的Click事件添加以下代码,单击此按钮实现停止播放的功能。/*/ 【停止】按钮的单击事件代码/*private void btnStop_Click(object sender, EventArgs e) mediaPlayer.URL = ; this.Text = 媒体播放器; tmrMedia.Enabled = false; btnReplay.Enabled = false; lstFileList.SelectedIndex = selectOne - 1;/*/*为播放列表框(lstFileList)的SelectedIndexChanged事件添加以下代码,控制必要时才让【删除】按钮可用。/*/ 列表框lstFileList按钮的SelectedIndexChanged事件代码/*private void lstFileList_SelectedIndexChanged(object sender, EventArgs e) btnDelete.Enabled = true;/*/*最后给计时器控件(tmrMedia)的Tick事件添加以下代码,这样在播放完一首音乐后会自动播放下一首,即实现连续播放的功能。/*/ 列表框tmrMedia按钮的Tick事件代码/*private void tmrMedia_Tick(object sender, EventArgs e) / 用Timer控件控制连续播放 if (mediaPlayer.playState = WMPLib.WMPPlayState.wmppsStopped) if (playOne = false) if (selectOne lstFileList.Items.Count) selectOne += 1; else if (selectOne = lstFileList.Items.Count) / 如果列表中所有媒体文件都播放完毕,则从头开始。 selectOne = 1; lstFileList.SelectedIndex = selectOne - 1; Play(selectOne); /*/*3.4 运行结果编译并运行程序,添加一些媒体文件后,双击列表框中的媒体文件,运行结果如图3-6所示。图3-6 播放媒体文件单击【删除单曲】按钮,因为列表框中被选中的媒体文件正在播放,故不能删除,如图3-7所示。图3-7 删除正在播放的媒体文件接下来单击【单曲循环】按钮,循环播放选中的媒体文件,如图3-8所示。图3-8 循环播放选中的媒体文件小结本章首先介绍了Windows Media Player控件的常用属性及其使用方法,以及如何将Windows Media Player控件添加到Visual C# 2005的工具箱中。然后利用它设计一个简单的媒体播放器。重点及难点:(1)Windows Media Player控件的常用属性;(2)使用Windows Media Player、Button、Panel、ListBox等控件设计多媒体播放器应用程序。综合练习三一、选择题1. Windows Media Player控件用于获取媒体播放器的工作状态的属性是( )。A. AllowDropB. ContexMenuStripC. PlayStateD. URL2. Windows Media Player控件用于设置媒体播放器播放的路径或地址的属性是( )。A. AllowDropB. ContexMenuStripC. PlayStateD. URL3. DirectoryInfo和FileInfo类均位于( )命名空间中。A. System.Collections.GenericB. System.IOC. System.Windows.FormsD. System.Drawing4. 表示列表框被选中列表项的属性是( )。A. SelectedItemB. SelectedIndexC. ItemsD. Text二、填空题1. Windows Media Player控件用于设置是否全屏显示的属性是 。2. 如要mediaPlayer1控件播放E盘MP3文件夹内的“国歌.mp3”音乐文件,则需要编写的播放程序代码为 。三、问答题1. 如何将Windows Media Player控件添加到工具箱中?2. 媒体播放器控件(Windows Media Player)主要的属性有哪些,如何编写播放媒体文件的代码?四、上机操作题1. 上机实现一个类似于本章介绍的MP3播放器,并实现【随机播放】功能。
展开阅读全文