Visual c++ 2008下Windows Media Player控件使用

操作系統:Windows 7
軟件環境:Visual C++ 2008 SP1
本次目的:在VC2008下Windows Media Player控件的用法之進階篇

      在上次的編寫Media Player播放器後,這次我們來實現對音視頻的控制,比如:播放、暫停、停止、快進、音量、進度條等等。首先我們在對話框上放置如下按鈕,如圖:

在對話框頭文件中,添加播放器的一些頭文件和聲明對象。

  1. // TestDlg.h : 頭文件   
  2. //   
  3. #pragma once   
  4. #include "afxwin.h"   
  5. #include "CWMPPlayer4.h"     //播放頭文件   
  6. #include "CWMPControls.h"   //控制頭文件   
  7. #include "CWMPSettings.h"   //設置頭文件   
  8. #include "CWMPMedia.h"      //媒體頭文件   
  9. #include "afxcmn.h"   
  10. // CTestDlg 對話框   
  11. class CTestDlg : public CDialog  
  12. {  
  13. // ······在這裏省略   
  14. public:  
  15.     CWMPPlayer4 m_Player;    //播放地址關聯   
  16.     CWMPControls m_control;  //控制按鈕關聯   
  17.     CWMPSettings m_setting;   //設置按鈕關聯   
  18.     CWMPMedia m_media;  //媒體   
  19.     CProgressCtrl m_progress;  //進度條       
  20. };  

對窗體添加事件,添加一個OnTimer()事件。對Media Player添加播放改變PlayStateChange()事件。具體代碼如下:

  1. // TestDlg.cpp : 實現文件   
  2. BOOL CTestDlg::OnInitDialog()  
  3. {  
  4.     //·········省略   
  5.     m_control=static_cast(m_Player.get_controls());  
  6.     m_setting=m_Player.get_settings();    
  7.     return TRUE;  // 除非將焦點設置到控件,否則返回 TRUE   
  8. }  
  9. void CTestDlg::OnBnClickedButton1()  
  10. {     
  11.     m_control.play();  //播放   
  12. }  
  13. void CTestDlg::OnBnClickedButton6()  
  14. {     
  15.     CString fileName;  
  16.     CFileDialog fileDialog( TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("音頻、視頻文件(*.*)|*.*||"),this);  
  17.     if (fileDialog.DoModal() == IDOK)  
  18.     {  
  19.         fileName=fileDialog.GetPathName();  
  20.         m_Player.put_URL(fileName);   //打開播放   
  21.     }   
  22.     m_media=static_cast(m_Player.newMedia(fileName));  
  23.     m_progress.SetRange(0,(int)m_media.get_duration());  //媒體總長度   
  24.     m_progress.SetPos(0);     
  25. }  
  26. void CTestDlg::OnBnClickedButton2()  
  27. {     
  28.     m_control.pause();  //暫停   
  29. }  
  30. void CTestDlg::OnBnClickedButton3()  
  31. {     
  32.     m_control.stop();        //停止   
  33. }  
  34. void CTestDlg::OnBnClickedButton4()  
  35. {     
  36.     m_control.fastForward();   //快進   
  37. }  
  38. void CTestDlg::OnBnClickedButton5()  
  39. {     
  40.     m_control.fastReverse();   //快退   
  41. }  
  42. void CTestDlg::OnBnClickedButton7()  
  43. {     
  44.     m_Player.put_fullScreen(1);   //全屏   
  45. }  
  46. void CTestDlg::OnBnClickedButton8()  
  47. {     
  48.     m_setting.put_volume(m_setting.get_volume()-10);   //音量減少   
  49. }  
  50. void CTestDlg::OnBnClickedButton9()  
  51. {     
  52.     m_setting.put_volume(m_setting.get_volume()+10);  //音量增加   
  53. }  
  54. void CTestDlg::PlayStateChangeOcx1(long NewState)  
  55. {     
  56.     if (NewState==3)                //播放狀態時, 開啓定時器   
  57.         SetTimer(1,1000,NULL);    
  58.     else if (NewState==1)             //停止時, 關閉定時器, 進度條回0   
  59.     {  
  60.         m_progress.SetPos(0);  
  61.         KillTimer(1);  
  62.     }  
  63.     else  
  64.         KillTimer(1);  
  65. }  
  66. void CTestDlg::OnTimer(UINT_PTR nIDEvent)  
  67. {  
  68.     // TODO: 在此添加消息處理程序代碼和/或調用默認值   
  69.     if (nIDEvent != 1)    
  70.          return;  
  71.     m_progress.SetPos(m_progress.GetPos()+1);  
  72.     CDialog::OnTimer(nIDEvent);  
  73. }  
(m_Player.get_controls()); m_setting=m_Player.get_settings(); return TRUE; // 除非將焦點設置到控件,否則返回 TRUE } void CTestDlg::OnBnClickedButton1() { m_control.play(); //播放 } void CTestDlg::OnBnClickedButton6() { CString fileName; CFileDialog fileDialog( TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("音頻、視頻文件(*.*)|*.*||"),this); if (fileDialog.DoModal() == IDOK) { fileName=fileDialog.GetPathName(); m_Player.put_URL(fileName); //打開播放 } m_media=static_cast(m_Player.newMedia(fileName)); m_progress.SetRange(0,(int)m_media.get_duration()); //媒體總長度 m_progress.SetPos(0); } void CTestDlg::OnBnClickedButton2() { m_control.pause(); //暫停 } void CTestDlg::OnBnClickedButton3() { m_control.stop(); //停止 } void CTestDlg::OnBnClickedButton4() { m_control.fastForward(); //快進 } void CTestDlg::OnBnClickedButton5() { m_control.fastReverse(); //快退 } void CTestDlg::OnBnClickedButton7() { m_Player.put_fullScreen(1); //全屏 } void CTestDlg::OnBnClickedButton8() { m_setting.put_volume(m_setting.get_volume()-10); //音量減少 } void CTestDlg::OnBnClickedButton9() { m_setting.put_volume(m_setting.get_volume()+10); //音量增加 } void CTestDlg::PlayStateChangeOcx1(long NewState) { if (NewState==3) //播放狀態時, 開啓定時器 SetTimer(1,1000,NULL); else if (NewState==1) //停止時, 關閉定時器, 進度條回0 { m_progress.SetPos(0); KillTimer(1); } else KillTimer(1); } void CTestDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息處理程序代碼和/或調用默認值 if (nIDEvent != 1) return; m_progress.SetPos(m_progress.GetPos()+1); CDialog::OnTimer(nIDEvent); }

效果如下:

Media player控件常用屬性 

屬性/方法名: 說明:
 [基本屬性 ]  
URL:String; 指定媒體位置,本機或網絡地址
uiMode:String; 播放器界面模式,可爲Full, Mini, None, Invisible
playState:integer; 播放狀態,1=停止,2=暫停,3=播放,6=正在緩衝,9=正在連接,10=準備就緒
enableContextMenu:Boolean; 啓用/禁用右鍵菜單
fullScreen:boolean; 是否全屏顯示
 [controls ] wmp.controls //播放器基本控制
controls.play; 播放
controls.pause; 暫停
controls.stop; 停止
controls.currentPosition:double; 當前進度
controls.currentPositionString:string; 當前進度,字符串格式。如“00:23”
controls.fastForward; 快進
controls.fastReverse; 快退
controls.next; 下一曲
controls.previous; 上一曲
 [settings ] wmp.settings //播放器基本設置
settings.volume:integer; 音量,0-100
settings.autoStart:Boolean; 是否自動播放
settings.mute:Boolean; 是否靜音
settings.playCount:integer; 播放次數
 [currentMedia ] wmp.currentMedia //當前媒體屬性
currentMedia.duration:double; 媒體總長度
currentMedia.durationString:string; 媒體總長度,字符串格式。如“03:24”
currentMedia.getItemInfo(const string); 獲取當前媒體信息"Title"=媒體標題,"Author"=藝術家,"Copyright"=版權信息,"Description"=媒體內容描述,"Duration"=持續時間(秒),"FileSize"=文件大小,"FileType"=文件類型,"sourceURL"=原始地址
currentMedia.setItemInfo(const string); 通過屬性名設置媒體信息
currentMedia.name:string; 同 currentMedia.getItemInfo("Title")
 [currentPlaylist ] wmp.currentPlaylist //當前播放列表屬性
currentPlaylist.count:integer; 當前播放列表所包含媒體數
currentPlaylist.Item[integer]; 獲取或設置指定項目媒體信息,其子屬性同wmp.currentMedia

表格轉載自:http://blog.csdn.net/jomakzhao/archive/2007/05/11/1604076.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章