VS2003下windows media player 控件的使用问题

   Windows media player作為MS的官方組件,MSDN上有著比較詳細的英文說明,但是該說明卻並不是那麼讓人一目了然。該文就如何操作該組件的幾個主要接口以及一些 基本功能的實現給與詳盡而明白的說明,為使該文儘量簡單易懂,本文給出了用windows media player控件編寫一個簡單播放器的基本步驟。
 
首 先,創建一個對話框,然後在資源管理器中右擊對話框,選擇“插入Active控件”—〉選擇windows media player—〉將控件拉到適合大小—〉右擊player控件—〉選擇添加變量(m_avPlayer)。此時添加的變量在VS2003中不在時 IWMPPlay4 了,而是COcx。
 
右 擊類視圖/解決方案—〉添加類—〉選擇“Active中的MFC類”—〉選擇windows media player<1.0>à選擇相應的接口(IWMPMedia IWMPSettings IWMPControls IWMPPlaylist等等)生成類。為圖方便,我將所有接口都生成了相應的類。
為了說明方便,我在對話框中放了幾個按鈕,分別是:打開,播放,暫停,停止,添加。並在對話框右邊添加了一個clistctrl又來顯示播放列表。
然後在對話框頭文件中添加了以下變量:
CWMPControls m_control;
CWMPSettings m_set; 
CWMPPlaylist m_playlist;
CWMPMedia m_media;
COcx1 m_avPlayer;
 
CListCtrl m_listCtrl;
 
一切準備工作就緒,下面就涉及到具體的編程問題了。
media player 的主要功能有:播放控制,屏幕顯示,播放列表,播放列表集,播放信息顯示。
 
         其中播放控制又有:打開,開始,暫停,停止,快速播放,倒退等等。
1.         打開:當選擇一個文件打開是,可以直接使用m_avPlayer.put_URL(fileName);
為打開按鈕添加消息響應函數,在函數中添加如下代碼:
char szFileFilter[]= 
  "Mp3 File(*.mp3)|*.mp3|"
  "MPEG File(*.mpeg)|*.mpeg|"
  "Media File(*.asf)|*.asf|"
  "Video File(*.dat)|*.dat|"
  "MPGA File(*.mpga)|*.mpga|"
  "Wave File(*.wav)|*.wav|"
  "AVI File(*.avi)|*.avi|"
  "Movie File(*.mov)|*.mov|"
  "Mid File(*.mid;*,rmi)|*.mid;*.rmi|"
  "Wma File(*.wma)|*.wma|"
  "All File(*.*)|*.*||";
 CFileDialog fileDialog( TRUE,NULL,NULL,NULL,szFileFilter,this);
 if (fileDialog.DoModal() == IDOK)
 {
  CString  fileName=fileDialog.GetPathName();
  m_avPlayer.put_URL(fileName);
 }
這樣當選擇一個播放文件後,media player就會自動播放該文件了。
2.         開始:為了實現播放控制,在OnInitDialog()中添加代碼:
m_control = static_cast<CWMPControls>(m_avPlayer.get_controls());
然後為開始按鈕添加消息響應函數,並在函數中添加代碼:
m_control.play();
3.         暫停:m_control.pause();
4.         停止:m_control.stop();
5.         其他如倒退,快速播放,MSDN上有相應的函數,讀者可依次自行解決。
到此,一個帶有簡單播放控制的播放器就完成。
 
         下麵來實現播放列表。為實現播放列表控制,首先在OnInitDialog()中添加代碼:
//創建一個播放列表
m_playlist = static_cast<CWMPPlaylist>(m_avPlayer.get_currentPlaylist());
然後將打開按鈕的消息響應函數改為:
char szFileFilter[]=
  "Mp3 File(*.mp3)|*.mp3|"
  "MPEG File(*.mpeg)|*.mpeg|"
  "Media File(*.asf)|*.asf|"
  "Video File(*.dat)|*.dat|"
  "MPGA File(*.mpga)|*.mpga|"
  "Wave File(*.wav)|*.wav|"
  "AVI File(*.avi)|*.avi|"
  "Movie File(*.mov)|*.mov|"
  "Mid File(*.mid;*,rmi)|*.mid;*.rmi|"
  "Wma File(*.wma)|*.wma|"
  "All File(*.*)|*.*||";
 CFileDialog fileDialog( TRUE,NULL,NULL,NULL,szFileFilter,this);
 if (fileDialog.DoModal() == IDOK)
 {
  CString  fileName=fileDialog.GetPathName();
  //創建一個媒體
  m_media = static_cast<CWMPMedia>(m_avPlayer.newMedia(fileName));
  //將媒體添加到播放列表
  m_playlist.appendItem(m_media);
  //將列表添加到當前列表,以便實現自動播放
  m_avPlayer.put_currentPlaylist(m_playlist);
 
  m_set = (CWMPSettings)m_avPlayer.get_settings();
  //參數true設置自動播放,false不設置自動播放
m_set.put_autoStart(true);
  //將媒體的名字添加到列表控件
  m_listCtrl.InsertItem(0, m_media.get_name());
 }
 
 接著是屏幕顯示控制
m_avPlayer.put_fullScreen(true/false);
 
         使用播放列表自動播放文件,第一步: 需要在播放列表中添加媒體;第二步:將列表設置為當前播放列表;第三步:將播放設置為自動播放。
函數如下:
 //創建媒體
 m_media = static_cast<CWMPMedia>(m_avPlayer.newMedia(fileName));
 //將媒體追加到播放列表
m_playlist.appendItem(m_media);
//將類別設置為當前列表
 m_avPlayer.put_currentPlaylist(m_playlist);
 //設置自動播放
 m_setting.put_autoStart(true);
 
         播放信息的顯示
可以通過CWMPMedia類獲取相關的媒體信息。
獲取播放文件名:media.get_name();
 
         其他,如鼠標,接盤事件響應,可添加相應的消息響應函數
要注意的是,在添加如鼠標一類的消息時,消息函數有個參數如nButton,它的值為1時是單擊鼠標左鍵,2為單擊鼠標右鍵消息,4為單擊鼠標中鍵。等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值