黄宁然的本家离职,留下了某项目开发,需用到MFC+Windows media player。在此整理一下。
0.环境
系统:win10
编程环境:VS2015
语言:C++
参考文献:https://it.cha138.com/php/show-4190378.html
1. 新建MFC工程
新建项目,选择vc++ -> MFC -> MFC应用程序。
应用程序向导里,选择“基于对话框”。其它默认。
2. 插入Windows media player 插件
窗口空白处,右击,选择“插入ActiveX控件”,选择“Windows media player”
添加后效果:
3. 添加微软的 CWMPPlayer代码包至工程中
网友提供了该代码包的下载:
链接:https://pan.baidu.com/s/15jQFdSWduAMWarr8uCX8KQ
提取码:zj4p
如果失效,请移步下载:https://download.csdn.net/download/xiaohuolong1827/87735662
下载后,添加对该目录的包含,并include如下.h文件,并将CWMPPlayer4.cpp文件,添加到工程中。
4. 新建变量,并与Windows media player控件绑定。
在对话框的.h文件中,添加变量
将变量m_player与上述步骤添加的 Windows media player控件绑定。在DoDataExchange函数中,添加如下语句,这里,IDC_OCX1是控件的ID。
DDX_Control(pDX, IDC_OCX1, m_player);
也可以通过在窗体中,右击控件,选择添加变量来完成。
5. 初始化m_control变量
可以将该条语句放在OnInitDialog函数中
m_control = static_cast<CWMPControls>(m_player.get_controls());
6. 添加按钮、文本框,写回调函数。
按钮包括打开、播放、暂停。
相应的回调:
void CmfcMediaPlayerDlg::OnBnClickedOpen()
{
// TODO: 在此添加控件通知处理程序代码
CString szFileFilter =
TEXT("All File(*.*)|*.*|Mp3 File(*.mp3)|*.mp3|MPEG File(*.mpeg)|*.mpeg|Media File(*.asf)|*.asf|Video File(*.dat)|*.dat|MPGA File(*.mpga)|*.mpga|Wave File(*.wav)|*.wav|AVI File(*.avi)|*.avi|Movie File(*.mov)|*.mov|Mid File(*.mid;*,rmi)|*.mid;*.rmi|Wma File(*.wma)|*.wma||");
CFileDialog fileDialog(TRUE, NULL, NULL, NULL, szFileFilter, this);
if (fileDialog.DoModal() == IDOK)
{
CString fileName = fileDialog.GetPathName();
((CEdit*)GetDlgItem(IDC_EDIT_file_name))->SetWindowTextW(fileName);
}
}
void CmfcMediaPlayerDlg::OnBnClickedPlay()
{
// TODO: 在此添加控件通知处理程序代码
CString fileName;
((CEdit*)GetDlgItem(IDC_EDIT_file_name))->GetWindowTextW(fileName);
try
{
m_player.put_URL(fileName);
m_control.play();
play_flag = 1;
((CButton*)GetDlgItem(IDC_PAUSE))->SetWindowTextW(_T("PAUSE"));
}
catch (...)
{
play_flag = 0;
((CButton*)GetDlgItem(IDC_PAUSE))->SetWindowTextW(_T("PAUSE"));
}
}
void CmfcMediaPlayerDlg::OnBnClickedPause()
{
// TODO: 在此添加控件通知处理程序代码
try
{
if (play_flag == 1)
{
m_control.pause();
((CButton*)GetDlgItem(IDC_PAUSE))->SetWindowTextW(_T("RESUME"));
play_flag = 2;
}
else if (play_flag == 2)
{
m_control.play();
play_flag = 1;
((CButton*)GetDlgItem(IDC_PAUSE))->SetWindowTextW(_T("PAUSE"));
}
}
catch (...)
{
play_flag = 0;
((CButton*)GetDlgItem(IDC_PAUSE))->SetWindowTextW(_T("PAUSE"));
}
}
运行效果:
对于网络链接,可直接在文本框中填入网址,如:
http://downsc.chinaz.net/files/download/sound1/201206/1638.mp3,点击播放。
7. 源码下载
源码下载移步:
https://download.csdn.net/download/xiaohuolong1827/87736600