声明:
参考博客:
http://blog.csdn.net/akof1314/article/details/4900040
http://blog.csdn.net/akof1314/article/details/4900244
http://blog.csdn.net/akof1314/article/details/4939553
下面,将具体介绍完整的流程:
一、新建一个基于对话框的MFC项目
二、在对话框上,右键 ->”插入ActiveX控件” -> “Windows Media Player” ->完成。
(若没有,则选择 “toolbox”-> “choose items” -> “COM Components” -> “windows media player” ->打勾)
三、添加类
“项目”->“添加类”-> “ActiveX控件中的MFC类”->“添加”
然后,发现找不到Windows Media Player这个控件,解决办法:
(*注意检查CWMPPlayer4这个类是派生自CWnd,否则会出现错误。)
添加好CWMPPlayer4之后,按照同样的方法再添加其他的类,出现错误:
解决办法:
四、下面就开始修改代码了:
首先,声明控件变量
然后,关联控件与变量
最后,
m_player.put_URL(_T("文件路径"));
//大功告成。
五、若要对控件进行控制,即可采用相同的方法,这里就贴上参考的博客上的代码:
// 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; //进度条
};
// TestDlg.cpp : 实现文件
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CTestDlg::DoDataExchange(pDX);
//**********************************************
DDX_Control(pDX, IDC_OCX1, m_Player);
DDX_Control(pDX, IDC_PROGRESS1, m_progress);
}
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);
}