版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/akof1314/article/details/4939553
操作系统: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<CWMPControls>(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<CWMPMedia>(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);
- }
效果如下:
<span style="color:#ff6600;">Media player控件常用属性 </span>
<span style="color:#ff6600;">Media player控件常用属性 </span>
</h1>
属性/方法名: |
]
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.youkuaiyun.com/jomakzhao/archive/2007/05/11/1604076.aspx