第03講 媒體播放器的制作
《第03講 媒體播放器的制作》由會員分享,可在線閱讀,更多相關(guān)《第03講 媒體播放器的制作(17頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第03講 媒體播放器 本章介紹了媒體播放控件(Windows Media Player)的常用屬性和方法,并且利用它設(shè)計一個簡單的媒體應(yīng)用程序——媒體播放器。該媒體播放器可以播放Wave、AVI、MIDI和mp3等格式的文件。Windows Media Player控件的引入使得在Visual C# 2005環(huán)境下制作多媒體應(yīng)用程序變得非常的簡單,只需要編寫幾行簡單的代碼,就可以達到播放多媒體文件的目的。 本章學(xué)習(xí)目標(biāo): (1)理解Windows Media Player控件的常用屬性。 (2)學(xué)會使用Windows Media Player、Button、Panel、ListBox
2、等控件設(shè)計多媒體播放器程序。 (3)通過本章實例,進一步掌握Visual C# 2005較小型的Windows應(yīng)用程序開發(fā)的基本思想。 3.1 Windows Media Player控件 Windows Media Player控件主要用于管理多媒體文件的記錄與回放,從概念上說,該控件就是一個完整的媒體播放器,它支持Wave、AVI、MIDI和mp3等格式。 3.1.1 添加Windows Media Player控件 Windows Media Player控件不在默認(rèn)的工具箱中,在設(shè)計多媒體應(yīng)用程序之前,需要將此控件添加到工具箱中,按以下步驟進行: (1)在工具箱中單擊右
3、鍵,彈出如圖3-1所示菜單。 圖3-1 添加控件 (2)單擊【選擇項】菜單命令,彈出如圖3-2所示的【選擇工具箱項】對話框。 圖3-2 【選擇工具箱項】對話框 (3)打開【COM組件】選項卡,并選中Windows Media Player組件復(fù)選框,然后單擊【確定】按鈕,則該控件被添加到工具箱中,如圖3-3所示。 圖3-3 添加控件后的工具箱 3.1.2 Windows Media Player控件簡介 在設(shè)計多媒體應(yīng)用程序時,跟添加其他控件一樣,將Windows Media Player控件添加到窗體上,它在窗體上的外觀如圖3-4所示。 圖3-4 媒
4、體播放器控件的外觀 從圖中可以看出,最上面的是顯示窗口,用于顯示媒體文件播放畫面,窗口下面是進度條,進度條下面是播放按鈕和音量控制滑竿,從左至右依次為:播放、停止、前一個、后一個、音量開關(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è)為空字符串即停止播放 //******************************************************************************* 下面用一個媒體播放器實例來介紹如何設(shè)計一個完整的媒體播放軟件。 3.2 界面設(shè)計及屬性設(shè)置 本節(jié)介紹媒體播放器的用戶界面設(shè)計以及窗體和窗體上各控件的屬性設(shè)置。 3.2.1 界面設(shè)計 新建一個Windows應(yīng)用程序,在窗體上依次放置ListBox、Windows Media Player、Pan
7、el和8個Button控件,如圖3-5所示(設(shè)置好屬性后)。 再為窗體添加一個OpenFileDialog控件、一個FolderBrowserDialog控件和一個Timer控件,它們的作用分別是: (1)OpenFileDialog控件:用于打開單個文件。 (2)FolderBrowserDialog控件:用于添加媒體文件目錄。 (3)Timer控件:用于控制連續(xù)播放媒體文件。 添加完上述三個控件后,可以看到窗體設(shè)計器下方的組件板上出現(xiàn)了這三個組件,如圖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 編寫代碼 因為媒體播放器需要用到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)播放 //******************************************************************************* 添加以下六個方法,分別用于添加單個媒體文件、添加媒體文件目錄、刪除媒體文件、播放媒體文件、打開和關(guān)閉窗體上的按鈕。 //**********************
13、********************************************************* // 添加單個媒體文件的方法 //******************************************************************************* 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、******************************** // 刪除單個媒體文件的方法 //******************************************************************************* 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)中的列表項全部復(fù)制到數(shù)組(file
26、List)中 numOfMusic = 0; // 選中第一個媒體文件 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事件添加以下代碼,添加媒體文件目錄,實現(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事件添加以下代碼,實現(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事件代碼如下,用于實現(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)事件添加以下代碼,實現(xiàn)通過雙擊列表框中的文件來播放。 //******************************************************************************* // 列表框lstFileList按鈕的雙擊事件代碼 //******************************************************************************* private void lstFileList_DoubleClick(object sender, Eve
41、ntArgs e) { // 雙擊播放列表中的媒體文件時,則播放該文件 btnPlay_Click(sender, e); playOne = false; btnReplay.Text = "單曲循環(huán)"; } //******************************************************************************* //******************************************************************************* 為【上一首
42、】按鈕(btnBack)的Click事件添加以下代碼,用于實現(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事件添加以下代碼,用于實現(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、鈕實現(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事件添加以下代碼,單擊此按鈕實現(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事件添加以下代碼,控制必要時才讓【刪除】按鈕可用。 //****
53、*************************************************************************** // 列表框lstFileList按鈕的SelectedIndexChanged事件代碼 //******************************************************************************* private void lstFileList_SelectedIndexChanged(object sender, EventArgs e) { btnDelete.En
54、abled = true; } //******************************************************************************* //******************************************************************************* 最后給計時器控件(tmrMedia)的Tick事件添加以下代碼,這樣在播放完一首音樂后會自動播放下一首,即實現(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 運行結(jié)果 編譯并運行程序,添加一些媒體文件后,雙擊列表框中的媒體文件,運行結(jié)果如圖3-6所示。 圖3-6 播放媒體文件 單擊【刪除單曲】按鈕,因為列表框中被選中的媒體文件正在播放,故不能刪除,如圖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è)計
59、一個簡單的媒體播放器。 重點及難點: (1)Windows Media Player控件的常用屬性; (2)使用Windows Media Player、Button、Panel、ListBox等控件設(shè)計多媒體播放器應(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. 表示列表框被選中列表項的屬性是( )。 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)主要的屬性有哪些,如何編寫播放媒體文件的代碼? 四、上機操作題 1. 上機實現(xiàn)一個類似于本章介紹的MP3播放器,并實現(xiàn)【隨機播放】功能。
- 溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版六年級下冊科學(xué)第一課時_-_我們身邊的物質(zhì)(教育精品)
- 以夢為馬勵志正能量年終工作總結(jié)動態(tài)模板課件
- 【培訓(xùn)課件】成功大學(xué)畢業(yè)生的綜合素質(zhì)結(jié)構(gòu)
- 【培訓(xùn)課件】義務(wù)消防員培訓(xùn)內(nèi)容
- 科學(xué)飲食健康生活專家講座
- 外觀設(shè)計專利權(quán)保護問題
- 熬夜的危害醫(yī)學(xué)
- 病態(tài)心理學(xué)醫(yī)學(xué)知識專題講座
- 意識障礙分類
- 小清新卡通世界環(huán)境日教育PPT模板課件
- 《大樹的故事》教學(xué)課件
- 護理安全和管理措施
- 團學(xué)工作中存在的問題及解決方案
- 小兒發(fā)熱的常見病因和處置措施專家講座
- 伴性遺傳上課用專家講座