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為單擊鼠標中鍵。等等。