第03講 媒體播放器的制作
《第03講 媒體播放器的制作》由會員分享,可在線閱讀,更多相關(guān)《第03講 媒體播放器的制作(17頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、第03講 媒體播放器 本章介紹了媒體播放控件(Windows Media Player)的常用屬性和方法,并且利用它設(shè)計(jì)一個(gè)簡單的媒體應(yīng)用程序——媒體播放器。該媒體播放器可以播放Wave、AVI、MIDI和mp3等格式的文件。Windows Media Player控件的引入使得在Visual C# 2005環(huán)境下制作多媒體應(yīng)用程序變得非常的簡單,只需要編寫幾行簡單的代碼,就可以達(dá)到播放多媒體文件的目的。 本章學(xué)習(xí)目標(biāo): (1)理解Windows Media Player控件的常用屬性。 (2)學(xué)會使用Windows Media Player、Button、Panel、ListBox
2、等控件設(shè)計(jì)多媒體播放器程序。 (3)通過本章實(shí)例,進(jìn)一步掌握Visual C# 2005較小型的Windows應(yīng)用程序開發(fā)的基本思想。 3.1 Windows Media Player控件 Windows Media Player控件主要用于管理多媒體文件的記錄與回放,從概念上說,該控件就是一個(gè)完整的媒體播放器,它支持Wave、AVI、MIDI和mp3等格式。 3.1.1 添加Windows Media Player控件 Windows Media Player控件不在默認(rèn)的工具箱中,在設(shè)計(jì)多媒體應(yīng)用程序之前,需要將此控件添加到工具箱中,按以下步驟進(jìn)行: (1)在工具箱中單擊右
3、鍵,彈出如圖3-1所示菜單。 圖3-1 添加控件 (2)單擊【選擇項(xiàng)】菜單命令,彈出如圖3-2所示的【選擇工具箱項(xiàng)】對話框。 圖3-2 【選擇工具箱項(xiàng)】對話框 (3)打開【COM組件】選項(xiàng)卡,并選中Windows Media Player組件復(fù)選框,然后單擊【確定】按鈕,則該控件被添加到工具箱中,如圖3-3所示。 圖3-3 添加控件后的工具箱 3.1.2 Windows Media Player控件簡介 在設(shè)計(jì)多媒體應(yīng)用程序時(shí),跟添加其他控件一樣,將Windows Media Player控件添加到窗體上,它在窗體上的外觀如圖3-4所示。 圖3-4 媒
4、體播放器控件的外觀 從圖中可以看出,最上面的是顯示窗口,用于顯示媒體文件播放畫面,窗口下面是進(jìn)度條,進(jìn)度條下面是播放按鈕和音量控制滑竿,從左至右依次為:播放、停止、前一個(gè)、后一個(gè)、音量開關(guān)按鈕和音量調(diào)節(jié)器。 媒體播放器控件的常用屬性有: (1)AllowDrop:允許拖動。 (2)ContextMenuStrip:允許用戶自定義彈出菜單。 (3)fullScreen:用于設(shè)置是否全屏顯示。 (4)Visible:是否可見。 (5)PlayState:用于獲取媒體播放器的工作狀態(tài)。 (6)URL:用于設(shè)置媒體播放器播放的路徑或地址。 使用媒體播放器播放多媒體文件的方法非常簡單,
5、例如: //******************************************************************************* MediaPlayer.URL = "D:\\國歌.mp3"; // 播放D盤上的"國歌.mp3" //******************************************************************************* 停止播放的代碼為: //**************************************************************
6、***************** MediaPlayer.URL = ""; // 設(shè)為空字符串即停止播放 //******************************************************************************* 下面用一個(gè)媒體播放器實(shí)例來介紹如何設(shè)計(jì)一個(gè)完整的媒體播放軟件。 3.2 界面設(shè)計(jì)及屬性設(shè)置 本節(jié)介紹媒體播放器的用戶界面設(shè)計(jì)以及窗體和窗體上各控件的屬性設(shè)置。 3.2.1 界面設(shè)計(jì) 新建一個(gè)Windows應(yīng)用程序,在窗體上依次放置ListBox、Windows Media Player、Pan
7、el和8個(gè)Button控件,如圖3-5所示(設(shè)置好屬性后)。 再為窗體添加一個(gè)OpenFileDialog控件、一個(gè)FolderBrowserDialog控件和一個(gè)Timer控件,它們的作用分別是: (1)OpenFileDialog控件:用于打開單個(gè)文件。 (2)FolderBrowserDialog控件:用于添加媒體文件目錄。 (3)Timer控件:用于控制連續(xù)播放媒體文件。 添加完上述三個(gè)控件后,可以看到窗體設(shè)計(jì)器下方的組件板上出現(xiàn)了這三個(gè)組件,如圖3-5所示(設(shè)置好屬性后)。 圖3-5 媒體播放器用戶界面 3.2.2 屬性設(shè)置 窗體和各控件的屬性設(shè)置如表3-1所
8、示。 表3-1 窗體和各控件的屬性 控件類型 控件名稱 屬性 設(shè)置結(jié)果 Form Form1 Text 媒體播放器 StartPosition CenterScreen MaximizeBox False AutoSizeMode GrowAndShrink Windows Media Player Windows Media Player1 Name mediaPlayer ListBox ListBox1 Name lstFileList OpenFileDialog OpenFileDialog1 Name odlgMedia F
9、olderBrowserDialog FolderBrowserDialog1 Name fbdlgMedia Timer Timer1 Name tmrMedia Panel Panel1 BorderStyle Fixed3D Button Button1 Name btnAddFile Text 添加歌曲 Button2 Name btnAddFiles Text 添加目錄 Button3 Name btnDelete Text 刪除單曲 Button4 Name btnPlay Text 播放 Button5 Name
10、 btnBack Text 上一首 Button6 Name btnForward Text 下一首 Button7 Name btnReplay Text 單曲循環(huán) Button8 Name btnStop Text 停止 3.3 編寫代碼 因?yàn)槊襟w播放器需要用到DirectoryInfo、FileInfo等類,所以首先應(yīng)當(dāng)引入System.IO命名空間: //******************************************************************************* using System.I
11、O; //******************************************************************************* 接下來在代碼的通用段定義以下公共數(shù)組和變量: //******************************************************************************* string[] fileList = new string[10000]; // 定義播放列表數(shù)的最大值 int numOfMusic;
12、 // 選中的媒體文件的索引號 int selectOne; // 選中的音樂文件 bool playOne = false; // 控制是否循環(huán)播放 //******************************************************************************* 添加以下六個(gè)方法,分別用于添加單個(gè)媒體文件、添加媒體文件目錄、刪除媒體文件、播放媒體文件、打開和關(guān)閉窗體上的按鈕。 //**********************
13、********************************************************* // 添加單個(gè)媒體文件的方法 //******************************************************************************* public void AddFile(string path) { if (numOfMusic < 10000) { numOfMusic += 1; fileList[numOfMusic] = path; }
14、 else { MessageBox.Show("不能添加文件!","播放列表已滿"); } } //******************************************************************************* //******************************************************************************* //*******************************************************
15、************************ // 添加媒體文件目錄的方法 //******************************************************************************* public void AddFiles(string path,ListBox lstFiles) { DirectoryInfo dir = new DirectoryInfo(path); foreach (FileInfo f in dir.GetFiles ("*.mp3")) { Add
16、File(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 d
17、ir.GetDirectories()) { AddFiles(d.FullName, lstFileList); } } //******************************************************************************* //******************************************************************************* //***********************************************
18、******************************** // 刪除單個(gè)媒體文件的方法 //******************************************************************************* public void DelFile(int selectNum) { int i; for (i = selectNum; i <= numOfMusic - 1; i++) { fileList[i] = fileList[i + 1]; } numOfMu
19、sic -= 1; } //******************************************************************************* //******************************************************************************* //******************************************************************************* // 播放媒體文件的方法 //*******************
20、************************************************************ public void Play(int selectNum) { mediaPlayer.URL = fileList[selectNum]; // 播放選中的媒體文件 this.Text = "正在播放 -- " + lstFileList.SelectedItem.ToString(); } //******************************************************************
21、************* //******************************************************************************* //******************************************************************************* // 使部分按鈕可用的方法 //******************************************************************************* public void OpenBtn
22、() { btnPlay.Enabled = true; btnBack.Enabled = true; btnForward.Enabled = true; } //******************************************************************************* //******************************************************************************* //******************************
23、************************************************* // 使部分按鈕不可用的方法 //******************************************************************************* public void CloseBtn() { btnPlay.Enabled = false; btnBack.Enabled = false; btnForward.Enabled = false; btnStop.Enabled = false;
24、 btnReplay.Enabled = false; btnDelete.Enabled = false; } //******************************************************************************* //******************************************************************************* 接下來編寫窗體的載入(Load)事件代碼如下,用于初始化各數(shù)據(jù)和窗體上各按鈕控件的狀態(tài)。 //*******************
25、************************************************************ // 窗體的載入事件代碼 //******************************************************************************* private void Form1_Load(object sender, EventArgs e) { lstFileList.Items.CopyTo(fileList, 0); // 將列表框(lstFileList)中的列表項(xiàng)全部復(fù)制到數(shù)組(file
26、List)中 numOfMusic = 0; // 選中第一個(gè)媒體文件 CloseBtn(); } //******************************************************************************* //******************************************************************************* 為【添加文件】按鈕(btnAddFile)的Click事件添加以下代碼,添加媒體文件。 //****************
27、*************************************************************** // 【添加文件】按鈕的單擊事件代碼 //******************************************************************************* private void btnAddFile_Click(object sender, EventArgs e) { int i; odlgMedia.FileName = "";
28、// 設(shè)置默認(rèn)文件名 odlgMedia.InitialDirectory = "C:\\"; // 設(shè)置默認(rèn)路徑 odlgMedia.Filter = "mp3文件|*.mp3|所有文件|*.*"; // 設(shè)置文件類型 if (odlgMedia.ShowDialog() == DialogResult.OK) { string path = odlgMedia.FileName; FileInfo f = new FileInfo(path); AddFil
29、e(f.FullName); string strFile = Convert.ToString(numOfMusic); for (i = 1; i <= 5 - strFile.Length; i++) { strFile += ""; } strFile = f.Name; lstFileList.Items.Add(strFile); if (lstFileList.Items.Count > 0) {
30、 OpenBtn(); } } } //******************************************************************************* //******************************************************************************* 再為【添加目錄】按鈕(btnAddFiles)的Click事件添加以下代碼,添加媒體文件目錄,實(shí)現(xiàn)成批地添加媒體文件。 //********************************
31、*********************************************** // 【添加目錄】按鈕的單擊事件代碼 //******************************************************************************* private void btnAddFiles_Click(object sender, EventArgs e) { fbdlgMedia.SelectedPath = "C:\\"; fbdlgMedia.ShowNewFolderButton = true;
32、 fbdlgMedia.Description = "請選擇媒體文件目錄:"; fbdlgMedia.ShowNewFolderButton = false; if (fbdlgMedia.ShowDialog() == DialogResult.OK) { AddFiles(fbdlgMedia.SelectedPath, lstFileList); if (lstFileList.Items.Count > 0) { OpenBtn(); } } }
33、 //******************************************************************************* //******************************************************************************* 為【刪除】按鈕(btnDelete)的Click事件添加以下代碼,實(shí)現(xiàn)從列表框中刪除選中的文件。 //*******************************************************************************
34、 // 【刪除單曲】按鈕的單擊事件代碼 //******************************************************************************* private void btnDelete_Click(object sender, EventArgs e) { int i = lstFileList.SelectedIndex; if (lstFileList.SelectedIndex >= 0) { if ((selectOne == lstFileList.SelectedI
35、ndex + 1) && (mediaPlayer.URL != "")) { MessageBox.Show("不能刪除正在播放的文件", "錯誤"); } else { DelFile(i + 1); lstFileList.Items.RemoveAt(i); if (i < lstFileList.Items.Count) { lstFileList.
36、SelectedIndex = i; } else if (lstFileList.Items.Count == 0) { CloseBtn(); } else { lstFileList.SelectedIndex = 0; } } } } //***********************************
37、******************************************** //******************************************************************************* 編寫【播放】按鈕(btnPlay)的Click事件代碼如下,用于實(shí)現(xiàn)播放功能。 //******************************************************************************* // 【播放】按鈕的單擊事件代碼 //***************************
38、**************************************************** private void btnPlay_Click(object sender, EventArgs e) { if (lstFileList.SelectedIndex < 0) { selectOne = 1; lstFileList.SelectedIndex = 0; } else { selectOne = lstFileList.SelectedIndex + 1;
39、 } Play(selectOne); tmrMedia.Enabled = true; btnStop.Enabled = true; btnReplay.Enabled = true; } //******************************************************************************* //******************************************************************************* 為播放列表框(lstFi
40、leList)的雙擊(DoubleClick)事件添加以下代碼,實(shí)現(xiàn)通過雙擊列表框中的文件來播放。 //******************************************************************************* // 列表框lstFileList按鈕的雙擊事件代碼 //******************************************************************************* private void lstFileList_DoubleClick(object sender, Eve
41、ntArgs e) { // 雙擊播放列表中的媒體文件時(shí),則播放該文件 btnPlay_Click(sender, e); playOne = false; btnReplay.Text = "單曲循環(huán)"; } //******************************************************************************* //******************************************************************************* 為【上一首
42、】按鈕(btnBack)的Click事件添加以下代碼,用于實(shí)現(xiàn)播放上一首的功能。 //******************************************************************************* // 【上一首】按鈕的單擊事件代碼 //******************************************************************************* private void btnBack_Click(object sender, EventArgs e) { if (lstFil
43、eList.SelectedIndex > 0) { lstFileList.SelectedIndex -= 1; } else if (lstFileList.SelectedIndex == 0) { lstFileList.SelectedIndex = lstFileList.Items.Count - 1; } else { lstFileList.SelectedIndex = numOfMusic - 1; } selectOne =
44、lstFileList.SelectedIndex + 1; Play(selectOne); btnStop.Enabled = true; btnReplay.Enabled = true; } //******************************************************************************* //******************************************************************************* 為【下一首】按鈕(btnForwa
45、rd)的Click事件添加以下代碼,用于實(shí)現(xiàn)播放下一首的功能。 //******************************************************************************* // 【下一首】按鈕的單擊事件代碼 //******************************************************************************* private void btnForward_Click(object sender, EventArgs e) { if (lstFileList.
46、SelectedIndex < lstFileList.Items.Count - 1) { lstFileList.SelectedIndex = lstFileList.SelectedIndex + 1; } else { if (lstFileList.SelectedIndex > 0) { lstFileList.SelectedIndex = 0; } } selectOne = lstFileList.SelectedIn
47、dex + 1; Play(selectOne); btnStop.Enabled = true; btnReplay.Enabled = true; } //******************************************************************************* //******************************************************************************* 為【單曲循環(huán)】按鈕(btnReplay)的Click事件添加以下代碼,單擊此按
48、鈕實(shí)現(xiàn)“循環(huán)/停止循環(huán)”播放的功能。 //******************************************************************************* // 【單曲循環(huán)】按鈕的單擊事件代碼 //******************************************************************************* private void btnReplay_Click(object sender, EventArgs e) { if (playOne == true) {
49、 playOne = false; btnReplay.FlatStyle = FlatStyle.Standard; // 設(shè)置按鈕外觀為三維 btnReplay.Text = "單曲循環(huán)"; } else { playOne = true; btnReplay.FlatStyle = FlatStyle.Popup; // 設(shè)置按鈕外觀為平面顯示 btnReplay.Text = "取消循環(huán)"; } lstFileLis
50、t.SelectedIndex = selectOne - 1; } //******************************************************************************* //******************************************************************************* 為【停止】按鈕(btnStop)的Click事件添加以下代碼,單擊此按鈕實(shí)現(xiàn)停止播放的功能。 //***********************************************
51、******************************** // 【停止】按鈕的單擊事件代碼 //******************************************************************************* private void btnStop_Click(object sender, EventArgs e) { mediaPlayer.URL = ""; this.Text = "媒體播放器"; tmrMedia.Enabled = false; btnReplay.Enabled
52、= false; lstFileList.SelectedIndex = selectOne - 1; } //******************************************************************************* //******************************************************************************* 為播放列表框(lstFileList)的SelectedIndexChanged事件添加以下代碼,控制必要時(shí)才讓【刪除】按鈕可用。 //****
53、*************************************************************************** // 列表框lstFileList按鈕的SelectedIndexChanged事件代碼 //******************************************************************************* private void lstFileList_SelectedIndexChanged(object sender, EventArgs e) { btnDelete.En
54、abled = true; } //******************************************************************************* //******************************************************************************* 最后給計(jì)時(shí)器控件(tmrMedia)的Tick事件添加以下代碼,這樣在播放完一首音樂后會自動播放下一首,即實(shí)現(xiàn)連續(xù)播放的功能。 //*************************************************
55、****************************** // 列表框tmrMedia按鈕的Tick事件代碼 //******************************************************************************* private void tmrMedia_Tick(object sender, EventArgs e) { // 用Timer控件控制連續(xù)播放 if (mediaPlayer.playState == WMPLib.WMPPlayState.wmppsStopped) {
56、 if (playOne == false) { if (selectOne < lstFileList.Items.Count) { selectOne += 1; } else if (selectOne == lstFileList.Items.Count) { // 如果列表中所有媒體文件都播放完畢,則從頭開始。 selectO
57、ne = 1; } } lstFileList.SelectedIndex = selectOne - 1; Play(selectOne); } } //******************************************************************************* //******************************************************************************
58、* 3.4 運(yùn)行結(jié)果 編譯并運(yùn)行程序,添加一些媒體文件后,雙擊列表框中的媒體文件,運(yùn)行結(jié)果如圖3-6所示。 圖3-6 播放媒體文件 單擊【刪除單曲】按鈕,因?yàn)榱斜砜蛑斜贿x中的媒體文件正在播放,故不能刪除,如圖3-7所示。 圖3-7 刪除正在播放的媒體文件 接下來單擊【單曲循環(huán)】按鈕,循環(huán)播放選中的媒體文件,如圖3-8所示。 圖3-8 循環(huán)播放選中的媒體文件 小結(jié) 本章首先介紹了Windows Media Player控件的常用屬性及其使用方法,以及如何將Windows Media Player控件添加到Visual C# 2005的工具箱中。然后利用它設(shè)計(jì)
59、一個(gè)簡單的媒體播放器。 重點(diǎn)及難點(diǎn): (1)Windows Media Player控件的常用屬性; (2)使用Windows Media Player、Button、Panel、ListBox等控件設(shè)計(jì)多媒體播放器應(yīng)用程序。 綜合練習(xí)三 一、選擇題 1. Windows Media Player控件用于獲取媒體播放器的工作狀態(tài)的屬性是( )。 A. AllowDrop B. ContexMenuStrip C. PlayState D. URL 2. Windows Media Player控件用于設(shè)置媒體播放器播放的路徑或地址的屬性是(
60、 )。 A. AllowDrop B. ContexMenuStrip C. PlayState D. URL 3. DirectoryInfo和FileInfo類均位于( )命名空間中。 A. System.Collections.Generic B. System.IO C. System.Windows.Forms D. System.Drawing 4. 表示列表框被選中列表項(xiàng)的屬性是( )。 A. SelectedItem B. SelectedIndex C. Items D. Text
61、 二、填空題 1. Windows Media Player控件用于設(shè)置是否全屏顯示的屬性是 。 2. 如要mediaPlayer1控件播放E盤MP3文件夾內(nèi)的“國歌.mp3”音樂文件,則需要編寫的播放程序代碼為 。 三、問答題 1. 如何將Windows Media Player控件添加到工具箱中? 2. 媒體播放器控件(Windows Media Player)主要的屬性有哪些,如何編寫播放媒體文件的代碼? 四、上機(jī)操作題 1. 上機(jī)實(shí)現(xiàn)一個(gè)類似于本章介紹的MP3播放器,并實(shí)現(xiàn)【隨機(jī)播放】功能。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運(yùn)動會安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個(gè)人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結(jié)+在機(jī)關(guān)“弘揚(yáng)憲法精神推動發(fā)改工作高質(zhì)量發(fā)展”專題宣講報(bào)告會上的講話
- 2024年XX村合作社年報(bào)總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊教研組工作總結(jié)
- 2024年小學(xué)高級教師年終工作總結(jié)匯報(bào)
- 2024-2025年秋季第一學(xué)期初中物理上冊教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報(bào)告
- 2025年學(xué)校元旦迎新盛典活動策劃方案
- 2024年學(xué)校周邊安全隱患自查報(bào)告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報(bào)告