使用Windows Media Play-ActiveX控制項

來源:互聯網
上載者:User

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

媒體播放器(Media Player)是DirectX Media中的一個ActiveX控制項,支援大多數標準流媒體格式的播放,如ASF、AVI、MPEG、WAV、MIDI、MP3、WMA等,但對RM和MOV支援得不夠。

建立一個基於對話方塊的MFC應用程式MPlay

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

1. 添加ActiveX控制項

(VC++ 6.0)

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

 

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

( VC++2005方法)

1 開啟工具箱視窗,在其空白區單擊滑鼠右鍵,在快顯功能表中選中“選擇項”功能表項目;也可以選VS的“工具/選擇工具箱項”功能表項目;在彈出的“選擇工具箱項”對話方塊中,選擇“COM組件”頁;滾動到列表框的底部,選中“Windows Media Player”項,按“確定”鈕,關閉對話方塊。系統會將一個“ Windows Media Player”控制項,加入到工具箱的對話方塊編輯器欄的底部。這樣你就可以將其加入到對話方塊資源中了。

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

)

2)設計對話方塊

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

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

3)添加控制項變數

為了能使用媒體播放器控制項,我們必須為該控制項添加一個控制項型類變數 m_ctrlMPlayer;

同時給開啟按鈕添加了變數m_ctrlLoad.

(4)使用控制項

這裡所要做的工作,只是在CMPlayDlg類中,為“裝入”按鈕添加單擊事件BN_CLICKED的處理常式OnBnClickedLoad,並在該函數中開啟公用檔案對話方塊,擷取使用者選擇的媒體檔案名,並將該檔案的路徑傳遞給媒體播放器類對象:

 

VC++ 6.0 代碼:

void CMPlayDlg::OnBnClickedLoad() ...{

       CFileDialog dlg(TRUE, NULL, L"*.*", OFN_FILEMUSTEXIST,

              "Active Streaming Format(*.asf)|*.asf|"      

              "Audio Video Interleave Format(*.avi)|*.avi|"

              "RealAudio/RealVideo(*.rm)|*.rm|"

              "Wave Audio(*.wav)|*.wav|"

              "MIDI File(*.mid)|*.mid|"

              "所有檔案(*.*)|*.*||");

       if (dlg.DoModal() == IDOK) ...{

              //m_ctrlMPlayer.put_stretchToFit(TRUE); // 伸縮畫面,使其適合播放視窗

              // …… 可以在此進行各種其他設定

              m_ctrlMPlayer.SetUrl(dlg.GetPathName()); // 傳遞媒體檔案到播放器

                             

       }

}

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)改變播放器視窗大小

要使程式可以讓使用者任意改變播放器視窗的大小,則需要設定對話方塊(位於屬性視窗頂部的外觀欄中)的邊框屬性border為Resizing(可調整大小),該屬性的預設值為Dialog Frame(對話方塊邊框),是不能調整大小的。還可以同時設定Maximize Box和Minimize 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(0, 0, cx-40, cy);

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

}

還可以為對話方塊類再添加WM_KEYUP訊息響應函數。在該函數中,響應使用者按鍵Ctrl+L|O|F,開啟公用檔案對話方塊,讓使用者選擇媒體檔案,並將其傳送給播放器對象(後面這部分代碼與前面的一樣)。

代碼如下:(VC++ 2005)

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);
}

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.