操作系統:Windows 7
軟件環境:Visual C++ 2008 SP1
本次目的:在VC2008下Windows Media Player控件的用法之進階篇
在上次的編寫Media Player播放器後,這次我們來實現對音視頻的控制,比如:播放、暫停、停止、快進、音量、進度條等等。首先我們在對話框上放置如下按鈕,如圖:
在對話框頭文件中,添加播放器的一些頭文件和聲明對象。
- // TestDlg.h : 頭文件
- //
- #pragma once
- #include "afxwin.h"
- #include "CWMPPlayer4.h" //播放頭文件
- #include "CWMPControls.h" //控制頭文件
- #include "CWMPSettings.h" //設置頭文件
- #include "CWMPMedia.h" //媒體頭文件
- #include "afxcmn.h"
- // CTestDlg 對話框
- class CTestDlg : public CDialog
- {
- // ······在這裏省略
- public:
- CWMPPlayer4 m_Player; //播放地址關聯
- CWMPControls m_control; //控制按鈕關聯
- CWMPSettings m_setting; //設置按鈕關聯
- CWMPMedia m_media; //媒體
- CProgressCtrl m_progress; //進度條
- };
對窗體添加事件,添加一個OnTimer()事件。對Media Player添加播放改變PlayStateChange()事件。具體代碼如下:
- // TestDlg.cpp : 實現文件
- BOOL CTestDlg::OnInitDialog()
- {
- //·········省略
- m_control=static_cast(m_Player.get_controls());
- m_setting=m_Player.get_settings();
- return TRUE; // 除非將焦點設置到控件,否則返回 TRUE
- }
- void CTestDlg::OnBnClickedButton1()
- {
- m_control.play(); //播放
- }
- void CTestDlg::OnBnClickedButton6()
- {
- CString fileName;
- CFileDialog fileDialog( TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("音頻、視頻文件(*.*)|*.*||"),this);
- if (fileDialog.DoModal() == IDOK)
- {
- fileName=fileDialog.GetPathName();
- m_Player.put_URL(fileName); //打開播放
- }
- m_media=static_cast(m_Player.newMedia(fileName));
- m_progress.SetRange(0,(int)m_media.get_duration()); //媒體總長度
- m_progress.SetPos(0);
- }
- void CTestDlg::OnBnClickedButton2()
- {
- m_control.pause(); //暫停
- }
- void CTestDlg::OnBnClickedButton3()
- {
- m_control.stop(); //停止
- }
- void CTestDlg::OnBnClickedButton4()
- {
- m_control.fastForward(); //快進
- }
- void CTestDlg::OnBnClickedButton5()
- {
- m_control.fastReverse(); //快退
- }
- void CTestDlg::OnBnClickedButton7()
- {
- m_Player.put_fullScreen(1); //全屏
- }
- void CTestDlg::OnBnClickedButton8()
- {
- m_setting.put_volume(m_setting.get_volume()-10); //音量減少
- }
- void CTestDlg::OnBnClickedButton9()
- {
- m_setting.put_volume(m_setting.get_volume()+10); //音量增加
- }
- void CTestDlg::PlayStateChangeOcx1(long NewState)
- {
- if (NewState==3) //播放狀態時, 開啓定時器
- SetTimer(1,1000,NULL);
- else if (NewState==1) //停止時, 關閉定時器, 進度條回0
- {
- m_progress.SetPos(0);
- KillTimer(1);
- }
- else
- KillTimer(1);
- }
- void CTestDlg::OnTimer(UINT_PTR nIDEvent)
- {
- // TODO: 在此添加消息處理程序代碼和/或調用默認值
- if (nIDEvent != 1)
- return;
- m_progress.SetPos(m_progress.GetPos()+1);
- CDialog::OnTimer(nIDEvent);
- }
效果如下:
Media player控件常用屬性
屬性/方法名: | 說明: |
[基本屬性 ] | |
URL:String; | 指定媒體位置,本機或網絡地址 |
uiMode:String; | 播放器界面模式,可爲Full, Mini, None, Invisible |
playState:integer; | 播放狀態,1=停止,2=暫停,3=播放,6=正在緩衝,9=正在連接,10=準備就緒 |
enableContextMenu:Boolean; | 啓用/禁用右鍵菜單 |
fullScreen:boolean; | 是否全屏顯示 |
[controls ] | wmp.controls //播放器基本控制 |
controls.play; | 播放 |
controls.pause; | 暫停 |
controls.stop; | 停止 |
controls.currentPosition:double; | 當前進度 |
controls.currentPositionString:string; | 當前進度,字符串格式。如“00:23” |
controls.fastForward; | 快進 |
controls.fastReverse; | 快退 |
controls.next; | 下一曲 |
controls.previous; | 上一曲 |
[settings ] | wmp.settings //播放器基本設置 |
settings.volume:integer; | 音量,0-100 |
settings.autoStart:Boolean; | 是否自動播放 |
settings.mute:Boolean; | 是否靜音 |
settings.playCount:integer; | 播放次數 |
[currentMedia ] | wmp.currentMedia //當前媒體屬性 |
currentMedia.duration:double; | 媒體總長度 |
currentMedia.durationString:string; | 媒體總長度,字符串格式。如“03:24” |
currentMedia.getItemInfo(const string); | 獲取當前媒體信息"Title"=媒體標題,"Author"=藝術家,"Copyright"=版權信息,"Description"=媒體內容描述,"Duration"=持續時間(秒),"FileSize"=文件大小,"FileType"=文件類型,"sourceURL"=原始地址 |
currentMedia.setItemInfo(const string); | 通過屬性名設置媒體信息 |
currentMedia.name:string; | 同 currentMedia.getItemInfo("Title") |
[currentPlaylist ] | wmp.currentPlaylist //當前播放列表屬性 |
currentPlaylist.count:integer; | 當前播放列表所包含媒體數 |
currentPlaylist.Item[integer]; | 獲取或設置指定項目媒體信息,其子屬性同wmp.currentMedia |
表格轉載自:http://blog.csdn.net/jomakzhao/archive/2007/05/11/1604076.aspx