VC2005下製作媒體播放器

來源:互聯網
上載者:User

前幾天突然間心血來潮,打算自己用VC做一個媒體播放器,於是到網上搜尋了一下,發現有很多好心人貼出了很多例子(很是感謝),一些是VC6寫的,一些是VC2003/2005寫的,都是直接通過wmp.dll(WINDOW MEDIA PLAYER9帶的ACTIVE控制項,存放在C:\WINDOWS\system32目錄下。本人對VC6有點排斥(哈哈,就是覺得其C++標準支援太差了,故一般做項目時不考慮,實在沒辦法的時候才採用),就直接開始在VC2005下按照提示編寫了。

開始總是一樣:

1、添加一個解決方案;

2、在解決方案下添加一個MFC對話方塊程式;

3、編輯對話方塊資源的時候,在左邊的工具列上通過選擇項-》COM組件,選擇Windows Media Player進行添加,添加之後工具列上即多了一個Windows Media Player項,把其拉到設計視窗中,選擇其屬性,設定enableContextMenu為true,即允許播放器快顯功能表;

4、給對話方塊添加菜單,菜單功能很簡單,就是檔案-》開啟/退出;

在資源視窗中通過右鍵選擇添加一個MENU,預設為IDR_MENU1,然後在對話方塊的屬性中把Menu設定為IDR_MENU1,此時即在對話方塊中加入了菜單:

5、實現子功能表項的開啟功能:

在資源視窗的開啟子功能表中,點擊右鍵,選擇添加事件處理,訊息選擇COMMAND,類列表選擇Dlg的那個,此時即可編輯函數:

void CMPlayDlg::On32771()
{
CFileDialog dlg(TRUE, NULL, L"*.*", OFN_FILEMUSTEXIST,
L"Active Streaming Format(*.asf)|*.asf|"\
L"Audio Video Interleave Format(*.avi)|*.avi|"\
L"RealAudio/RealVideo(*.rm)|*.rm|"\
L"Wave Audio(*.wav)|*.wav|"\
L"MIDI File(*.mid)|*.mid|"\
L"所有檔案(*.*)|*.*||");
if (dlg.DoModal() == IDOK) {
//m_ctrlMPlayer.put_stretchToFit(TRUE); // 伸縮畫面,使其適合播放視窗
// …… 可以在此進行各種其他設定
m_ctrlMPlayer.put_URL(dlg.GetPathName()); // 傳遞媒體檔案到播放器
}
}

6、實現視窗的WMSIZE:

由於視窗大小會產生改變,所以視窗中的視頻視窗也要作相應的變動,故需要實現視窗的WM_SIZE函數:

void CMPlayDlg::OnSize(UINT nType, int cx, int cy)
{
 CDialog::OnSize(nType, cx, cy);
 if (m_ctrlMPlayer)
 {
  m_ctrlMPlayer.MoveWindow(0, 0, cx-40, cy);
 }
}

註:沒加上 if (m_ctrlMPlayer)之前DEBUG總是報錯,RELEASE倒是沒事,後來我想應該是程式啟動時,m_ctrlMPlayer還沒有初始化,故報錯。

這樣一個簡單的播放器就做成了。

由於我想要查看一下當前播放的媒體的名稱以及想查看進度,故需要引進CWMPMedia和CWMPControls一類的控制對象,所以在解決方案的資源管理員中右鍵-》添加類-》MFC-》ACTIVEX中的MFC類-》下拉式清單中選擇Windows Media Player<1.0>,然後選擇左邊的一些相關類拉到右邊來,確定即可,此時這些類對應的H和CPP檔案就都加了進來;

我想控制播放器的播放,參考了網上的一些代碼,所以:

m_control =  m_ctrlMPlayer.get_controls();
 double d = m_control.get_currentPosition();
 d = d+1;
 CWMPMedia m_media = static_cast<CWMPMedia>(m_ctrlMPlayer.get_currentMedia());
 CString s = m_media.get_name();

哈哈,總是編譯不通過,後來查了一下,發現CWMPControls是繼承自CWnd,所以從網上抄了CWMPControls繼承自COleDispatchDriver的H和CPP的代碼。編譯通過(為了尋找這個問題,花了不少時間)。

哈哈,借花獻佛,希望有碰到同樣的問題的朋友少走點彎路。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.