您的位置:首页 > 其它

VC2008 Windows Media Player控件的使用技巧(三)

2013-08-30 09:21 741 查看
操作系统:Windows 7

软件环境:Visual C++ 2008 SP1

本次目的:在VC2008下Windows Media Player控件的用法之进阶篇

      在上次的编写Media Player播放器后,这次我们来实现对音视频的控制,比如:播放、暂停、停止、快进、音量、进度条等等。首先我们在对话框上放置如下按钮,如图:



在对话框头文件中,添加播放器的一些头文件和声明对象。

[cpp] view plaincopyprint?

// 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()事件。具体代码如下:

[cpp] view plaincopyprint?

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

}  

(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: