VC++2003/2005/2008 調用Mediaplayer的指南

小編:啊南 13閱讀 2020.11.19

通過對CWMPPlayer4、CWMPSettings和CWMPControls等幾個類的使用可以實現Windows Media Player的大部分常規功能,如果需要做進一步的控制,可以在用下面這些函數返回相關類對象后調用相關成員函數來加以實現:

  GetCurrentMedia() 返回CWMPMedia類對象

  GetMediaCollection() 返回CWMPMediaCollection類對象

  GetPlaylistCollection() 返回CWMPPlaylistCollection類對象

  GetNetwork() 返回CWMPNetwork類對象

  GetCurrentPlaylist() 返回CWMPPlaylist類對象

  GetCdromCollection() 返回CWMPCdromCollection類對象

  GetClosedCaption() 返回CWMPClosedCaption類對象

  GetError() 返回CWMPError類對象

  GetDvd() 返回CWMPDVD類對象

  GetPlayerApplication() 返回CWMPPlayerApplication類對象

1、新建一個基于對話框的mfc應用程序。

2、在工具箱上點右鍵選擇“選擇項”,打開com組件,選擇windows media player添加到工具箱上。

3、把media控件拖到窗體上.選中窗體。在菜單上選擇 項目-〉添加類-〉MFC->activex控件中的mfc類-〉添加。

4、選擇 windows media player<1.0>,添加IWMPControls類。

5、在xxxDlg.h中添加:

#include "CWMPControls.h"

。。。

public:  COcx1 mm;//Ocx1為media控件,mm為控件變量。  CWMPControls  m_control;

6、在xxxDlg.cpp文件中OnInitDialog()函數中添加:

 m_control = static_cast<CWMPControls>(mm.get_controls());

7、現在你可以用mm.put_URL去干你的事情了。

另外一種辦法,直接用COM操作, 例如:       CAxWindow                *m_pView;     CComObject<IWMPPlayer4>   m_spPlayer;        RECT rcClient;     CComPtr<IObjectWithSite>  spHostObject;     CComPtr<IAxWinHostWindow> spHost;     CComObject<CRemoteHost>   *pRemoteHost = NULL;     //創建ActiveX控件容器     AtlAxWinInit();     m_pView = new CAxWindow();      if(!m_pView)     {         hr = E_OUTOFMEMORY;     }     if(SUCCEEDED(hr))     {         ::GetWindowRect(GetDlgItem(IDC_RANGE), &rcClient);         ScreenToClient(&rcClient);         m_pView->Create(m_hWnd, rcClient, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,                                              WS_EX_CLIENTEDGE);         if(::IsWindow(m_pView->m_hWnd))         {             hr = m_pView->QueryHost(IID_IObjectWithSite, (void **)&spHostObject);         if(!spHostObject.p)         {           hr = E_POINTER;          }         }     }        //創建 IServiceProvider and IWMPRemoteMediaServices     if(SUCCEEDED(hr))     {         hr = CComObject<CRemoteHost>::CreateInstance(&pRemoteHost);         if(pRemoteHost)         {             pRemoteHost->AddRef();         }         else     {          hr = E_POINTER;     }     }        //Set site to the remote host     if(SUCCEEDED(hr))     {         hr = spHostObject->SetSite((IWMPRemoteMediaServices *)pRemoteHost);     }

    if(SUCCEEDED(hr))     {         hr = m_pView->QueryHost(&spHost);     if(!spHost.p)     {       hr = E_NOINTERFACE;     }     }

    //創建WindowsMediaPlayer的控件     if(SUCCEEDED(hr))     {         hr = spHost->CreateControl(CComBSTR(L"{6BF52A52-394A-11d3-B153-00C04F79FAA6}"),                                  m_pView->m_hWnd, NULL);     }

    if(SUCCEEDED(hr))     {         hr = m_pView->QueryControl(&m_spPlayer);     if(!m_spPlayer.p)     {          hr = E_NOINTERFACE;     }     }

    // Set skin to be custom skin     if(SUCCEEDED(hr))     {         DispEventAdvise(m_spPlayer); // Hook the event listener         hr = m_spPlayer->put_uiMode(CComBSTR(_T("custom")));     }        ......     m_spPlayer->put_URL(...);     CComPtr<IWMPControls> spControls;     m_spPlayer->get_controls(&spControls);     if(spControls.p)     {         spControls->play();     }          ......

首先,創建一個對話框,然后在資源管理器中右擊對話框,選擇“插入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 的主要功能有:播放控制,屏幕顯示,播放列表,播放列表集,播放信息顯示。

l         其中播放控制又有:打開,開始,暫停,停止,快速播放,倒退等等。

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上有相應的函數,讀者可依次自行解決。 到此,一個帶有簡單播放控制的播放器就完成。

l         下面來實現播放列表。為實現播放列表控制,首先在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());     }

l         接著是屏幕顯示控制 m_avPlayer.put_fullScreen(true/false);

l         使用播放列表自動播放文件,第一步: 需要在播放列表中添加媒體;第二步:將列表設置為當前播放列表;第三步:將播放設置為自動播放。 函數如下:        //創建媒體        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);

l         播放信息的顯示 可以通過CWMPMedia類獲取相關的媒體信息。 獲取播放文件名:media.get_name();
關聯標簽:
华东15选5彩票奖结果 (★^O^★)MG经典243_电子游艺 (^ω^)MG三重魔力游戏网站 高手一尾中特 福建快3查询规则 (★^O^★)MG沉默的武士登陆 (★^O^★)MG钻石帝国爆分打法 北京快三预测大小 (*^▽^*)MG角斗士免费下载 (★^O^★)MG万圣节新手攻略 (*^▽^*)MG孙悟空爆分打法 2018六肖中特期期准46 华东15选5l浙江 (★^O^★)MG夢幻邂逅登陆 合数单双中特 (^ω^)MG大明帝国怎么玩 福彩福建快3走势图一定牛