在VC++2005中使用Windows Media Play ActiveX控件

VC++2005有許多東西變了,比如ActiveX控件的添加和控制——僅僅爲了添加一個Windows Media Player控件,我就弄得頭暈轉向,按老辦法做行不通不說,自己摸索了半天+上網搜索+去書店翻書都沒有徹底。幸虧找到了這篇文章,才得以解決。感謝touzani大俠(http://blog.csdn.net/touzani/)!

原文如下:

以ActiveX控件——媒體播放器爲例,說明組件應用之功能強大和使用的簡單方便。

 

媒體播放器(Media Player)DirectX Media中的一個ActiveX控件,支持大多數標準流媒體格式的播放,如ASFAVIMPEGWAVMIDIMP3WMA等,但對RMMOV支持得不夠。

 

創建一個基於對話框的MFC應用程序MPlay

爲了能夠在項目中使用媒體播放器控件,必須先將媒體播放器控件添加到對話框編輯器工具箱中。(這需要在你的系統中,已經正確安裝了微軟公司的媒體播放器)

1. 添加ActiveX控件

(VC++ 6.0)

工程-添加到工程-> components and controls   選擇Windows Media Player

https://p-blog.csdn.net/images/p_blog_csdn_net/touzani/303255/o_mplay.jpg

 

插入到工具箱, 再拖到對話框中

( VC++2005方法)

1 打開工具箱窗口,在其空白區單擊鼠標右鍵,在彈出菜單中選中“選擇項”菜單項;也可以選VS的“工具/選擇工具箱項”菜單項;在彈出的“選擇工具箱項”對話框中,選擇“COM組件”頁;滾動到列表框的底部,選中“Windows Media Player”項,按“確定”鈕,關閉對話框。系統會將一個“<!--[if !vml]--><!--[endif]--> Windows Media Player”控件,加入到工具箱的對話框編輯器欄的底部。這樣你就可以將其加入到對話框資源中了。

 

2 你也可以簡單地在對話框資源中單擊鼠標右鍵,在彈出菜單中選中“插入ActiveX控件”菜單項;在打開的“插入ActiveX控件”對話框中,滾動列表框,選擇底部的“Windows Media Player”項,按“確定”鈕,關閉對話框。則系統會將其自動加入到對話框資源中(但這樣是不會在工具箱中添加對應控件的)。

)

2)設計對話框

 

在對話框中調整好媒體播放器控件的位置和大小,打開屬性窗口,設置其IDIDC_MP。去掉對話框中 “取消”鈕,將“確定”鈕中的文字改爲“打開(&O)”,並修改其IDIDC_LOAD(用來打開文件對話框,選擇播放的流媒體文件,並將該文件的路徑名傳遞給媒體播放器),而播放、暫停、停止等圖形按鈕控件中已經有了。
在你爲對話框加入媒體播放器控件後,
MFC會自動在資源文件MPlay.rc中添加對它的複雜初始化代碼.

還可以按屬性窗口工具條上的屬性頁按鈕,在彈出的“Windows Media Player屬性”對話框中,進行各種屬性設置,例如選中“按比例伸展”和“全屏播放”複選框。

 

3)添加控件變量

爲了能使用媒體播放器控件,我們必須爲該控件添加一個控件型類變量 m_ctrlMPlayer;

同時給打開按鈕添加了變量m_ctrlLoad.

 

4)使用控件

這裏所要做的工作,只是在CMPlayDlg類中,爲“裝入”按鈕添加單擊事件BN_CLICKED的處理程序OnBnClickedLoad,並在該函數中打開公用文件對話框,獲取用戶選擇的媒體文件名,並將該文件的路徑傳遞給媒體播放器類對象:

 

VC++ 6.0 代碼:

void CMPlayDlg::OnBnClickedLoad() ...

VC++ 2005 代碼:
void CMPlayDlg::OnBnClickedLoad() {

       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()); 
// 傳遞媒體文件到播放器

       }


}


在該函數中設置了若干流媒體文件過慮器,創建打開文件公用對話框對象,讓用戶選擇要播放的流媒體文件,並將該文件的路徑通過調用CMp類的成員函數Set_URL傳遞給媒體播放器。

 

注意,媒體播放器控件有各種不同的版本,對應的函數名也可能有所不同。如果找不到類似功能的函數,說明你係統中安裝的媒體播放器控件有問題,可以點擊這裏下栽mp.h頭文件,用它替代你的同名文件。

現在程序可以編譯運行了...

 

5)改變播放器窗口大小

要使程序可以讓用戶任意改變播放器窗口的大小,則需要設置對話框(位於屬性窗口頂部的外觀欄中)的邊框屬性borderResizing(可調整大小),該屬性的缺省值爲Dialog Frame(對話框邊框),是不能調整大小的。還可以同時設置Maximize BoxMinimize Box屬性爲True

爲了使媒體播放器的窗口隨對話框而改變大小,需要爲項目的對話框類添加WM_SIZE的消息響應函數OnSize。並在該函數中,調用CWnd的成員函數

void MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE);

來改變播放器窗口的大小(注意:媒體播放器類是CWnd的派生類)。注意也要把打開按鈕一起移動.

代碼如下:

void CMplayDlg::OnSize(UINT nType, int cx, int cy)

{

       CDialog::OnSize(nType, cx, cy);

       m_ctrlMPlayer.MoveWindow(
00, cx-40, cy);

       m_ctrlLoad.MoveWindow(cx
-40,0, cx, cy); // 改變打開按鈕位置

}

還可以爲對話框類再添加WM_KEYUP消息響應函數。在該函數中,響應用戶按鍵Ctrl+L|O|F,打開公用文件對話框,讓用戶選擇媒體文件,並將其傳送給播放器對象(後面這部分代碼與前面的一樣)。

代碼如下:(VC++ 2005)


 

源文件下載: MPlay.rar(VC6.0)46KB     MPlay.rar (for VC2005) 45KB

 

 

void CMPlayDlg::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) {

       if ((GetKeyState(VK_CONTROL) & 1<<15) &&

              (nChar == 'L' || nChar == 'O' || nChar == 'F')) {

              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); // 伸縮畫面,使其適合播放窗口

                     CString fn = L"MPlayer : " + dlg.GetFileName(); // 構造程序標題

                     SetWindowText(fn); // 設置程序窗口的標題

                     m_ctrlMPlayer.put_URL(dlg.GetPathName());

              }


       }


       CDialog::OnKeyUp(nChar, nRepCnt, nFlags);
}
發佈了37 篇原創文章 · 獲贊 2 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章