最近研究了一下MFC下的音乐的播放,主要使用了MCI

1.需要包含的库文件

在链接资源里(link)添加库文件VFW32.lib winmm.lib

2.包含的头文件

 #include <mmsystem.h>

 #include "stdafx.h"

 #include "vfw.h"

 #include <digitalv.h>

 #pragma comment(lib,"winmm.lib")

3.需要调用的成员变量和成员函数的声明、定义

 class CMp3Dlg : public CDialog
{
// Construction
public:
CMp3Dlg(CWnd* pParent = NULL); // standard constructor // Dialog Data
//{{AFX_DATA(CMp3Dlg)
enum { IDD = IDD_MP3_DIALOG };
CButton m_Play;
CString m_Path;
//}}AFX_DATA // ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMp3Dlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL // Implementation
protected:
HICON m_hIcon; // Generated message map functions
//{{AFX_MSG(CMp3Dlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnButtonOpenFile();
afx_msg void OnButtonPlayMusic();
afx_msg void OnButtonCyclePlay();
afx_msg void OnMciNotify(WPARAM wParam,LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP() public:
void CyclePlay(); private:
HWND m_video;
BOOL Pause; MCIDEVICEID m_wID;
};

4.添加消息响应

 BEGIN_MESSAGE_MAP(CMp3Dlg, CDialog)
//{{AFX_MSG_MAP(CMp3Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_OPEN, OnButtonOpenFile)
ON_BN_CLICKED(IDC_BUTTON_PLAY, OnButtonPlayMusic)
ON_BN_CLICKED(IDC_BUTTON_CYCLE_PLAY, OnButtonCyclePlay)
ON_MESSAGE(MM_MCINOTIFY,OnMciNotify)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

5.打开相应的文件
方法一:

 void CMp3Dlg::OnButtonOpenFile()
{
// TODO: Add your control notification handler code here
TCHAR szBuffer[MAX_PATH] = {};
BROWSEINFO bi;
ZeroMemory(&bi,sizeof(BROWSEINFO));
bi.hwndOwner = NULL;
bi.pszDisplayName = szBuffer;
bi.lpszTitle = _T("从下面选择文件或者文件夹:");
bi.ulFlags = BIF_BROWSEINCLUDEFILES;
LPITEMIDLIST idl = SHBrowseForFolder(&bi); if (NULL == idl)
{
return;
}
SHGetPathFromIDList(idl,szBuffer);
}

方法二:

 void CMp3Dlg::OnButtonOpenFile()
{
m_video = NULL;
if (m_video == NULL)
{
CFileDialog filedialog(TRUE,NULL,NULL,OFN_HIDEREADONLY,"MP3 Files (*.mp3)|*.mp3|");
if (filedialog.DoModal() == IDOK)
{
m_Path = filedialog.GetPathName();
UpdateData(FALSE);
}
}
}

6.音乐的播放
方法一:

 void CMp3Dlg::OnButtonPlayMusic()
{
// TODO: Add your control notification handler code here
m_video = NULL;
if(m_video == NULL)
{
m_video = MCIWndCreate(this->GetSafeHwnd(),
AfxGetInstanceHandle(),
WS_CHILD | WS_VISIBLE|MCIWNDF_NOMENU,m_Path);
}
else
{
MCIWndHome(m_video);
}
MCIWndPlay(m_video);
m_Play.EnableWindow(FALSE);
}

方法二:

 void CMp3Dlg::OnButtonCyclePlay()
{
// TODO: Add your control notification handler code here
MCI_OPEN_PARMS mciOP;
DWORD dwReturn; //ASSERT(m_wID == NULL); mciOP.lpstrDeviceType = NULL;
mciOP.lpstrElementName = m_Path;
dwReturn = mciSendCommand(,
MCI_OPEN,
MCI_OPEN_ELEMENT|MCI_WAIT|MCI_OPEN_SHAREABLE,
(DWORD)(LPVOID)&mciOP); if (dwReturn == )
{
m_wID = mciOP.wDeviceID;
}
else
{
m_wID = NULL;
} CyclePlay();
} void CMp3Dlg::CyclePlay()
{
MCI_PLAY_PARMS PlayParms;
PlayParms.dwCallback = (DWORD)GetSafeHwnd();
PlayParms.dwFrom = ;
//mciSendCommand(m_wID,MCI_PLAY,MCI_DGV_PLAY_REPEAT,(DWORD)(LPVOID)&PlayParms);
mciSendCommand(m_wID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&PlayParms);
}

7.循环播放
方法一:

mciSendCommand(m_wID,MCI_PLAY,MCI_DGV_PLAY_REPEAT,(DWORD)(LPVOID)&PlayParms);

//mciSendCommand(m_wID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&PlayParms);

将上面的35行注释掉,使用34行

方法二:添加消息响应函数

 void CMp3Dlg::OnMciNotify(WPARAM wParam,LPARAM lParam)
{
if(MCI_NOTIFY_SUCCESSFUL == wParam)
{
//mciSendCommand(m_wID,MCI_CLOSE,0,NULL);
//CyclePlay();
MCI_PLAY_PARMS PlayParms;
PlayParms.dwFrom = ;
PlayParms.dwCallback = (DWORD)m_hWnd;
mciSendCommand(m_wID, MCI_SEEK,MCI_SEEK_TO_START, NULL);
mciSendCommand(m_wID, MCI_PLAY, MCI_NOTIFY, (DWORD)(LPVOID)&PlayParms);
}
}

以上所述经过测试!

MFC下MCI的使用播放音乐的更多相关文章

  1. H5页面在IOS下不会自动播放音乐的坑

    document.addEventListener(‘DOMContentLoaded‘, function () { function audioAutoPlay() { var audio = d ...

  2. C# 播放音乐

    用 .NET 自带的类库 System.Media 下面的 SoundPlayer 来播放音乐的方式,此种方式使用托管代码,应该是更为可取的方式吧 使用起来非常简单,下面稍作说明: . 支持同步.异步 ...

  3. 在Linux终端命令行下播放音乐的命令(Ubuntu)

    现在的 Linux 桌面已经发展的很好了,在桌面下播放音乐操作起来也很简单.那么我们还记得在桌面不是那么好的时候我们是怎么播放音乐的么?哎,我是想不起来了,实在是太难了. 不过现在我们可以先安装一个小 ...

  4. MediaPlayer音乐播放器、上一首、下一首、播放、停止、自动下一首、进度条

    本文介绍MediaPlayer的使用.MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用Med ...

  5. Android使用的webcview中带有音乐播放控件,在关闭或分享时处于界面不可见状态下,声音仍在播放的问题解决

    一. 问题出现原因         我们在做APP分享时,分享webview加载带有音乐播放控件的网页.当弹出分享界面,webview的网页处于后台状态或关闭该网页时,音乐声仍在播放.出现该类现象使我 ...

  6. 在Linux终端命令行下播放音乐的命令

    现在的 Linux 桌面已经发展的很好了,在桌面下播放音乐操作起来也很简单.那么我们还记得在桌面不是那么好的时候我们是怎么播放音乐的么?哎,我是想不起来了,实在是太难了. 不过现在我们可以先安装一个小 ...

  7. pcDuino-V2利用madplay播放音乐

    在pcDuino的UBUNTU系统下,打开控制台,利用apt-get来下载madplay软件. sudo apt-get install madplay 播放音乐: madplay xxx.mp3 x ...

  8. matlab播放音乐

    最近在做计算,写了一些matlab代码,脑壳还疼,所以决定发挥一下逗B精神,写一个程序玩一下. 想了想,既然写代码的时候喜欢听歌,而且我的电脑打开网易音乐的速度巨慢(不知道为什么..),那些一个程序直 ...

  9. go语言让windows发出声音,或者播放音乐

    go语言让windows发出声音,或者播放音乐的例子:会发出alert警告的声音 ( 这是我应群员的求助写的, 如果你需要了解其中的调用原理或过程 或更多go语言调用win32api的资料,加群: 2 ...

随机推荐

  1. 6.MyBaits的分页和缓存查询

    1. 创建javaweb项目MyBaits_Page_CaChe 2.在项目的WebRoot下的WEB-INF下的lib文件下加入jar文件 log4j-1.2.17.jar mybatis-3.2. ...

  2. DUIlib使用Fastreport--报表简单使用

    fastreport是一个简单优秀的报表,fastreport更多是和delphi联合使用预览和打印数据的.我在开始使用duilib做项目时,打印和数据预览都是自己绘制的,这样不仅绘制麻烦费事费事,而 ...

  3. win7安装omnetpp-4.6

    最近做毕设要用omnet仿真系统,就试着在win7上装了一下,分享一下经验咯.因为lz经常刷机,所以安装过程都是从头再来的,费话不多说.下面是安装过程: (1)    安装jdk,我就百度一下,然后找 ...

  4. java变量和数据类型总结

  5. 用border做一个移动端常见的返回按钮

    第一步 .hs1{ float: left; .mt(.25rem); .ml(.12rem); width: .3rem; height: .3rem; border-top: 2px solid ...

  6. Java并发编程:深入剖析ThreadLocal(转载)

    Java并发编程:深入剖析ThreadLocal(转载) 原文链接:Java并发编程:深入剖析ThreadLocal 想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadL ...

  7. ip地址分类和网段区分

    IP地址分类/IP地址10开头和172开头和192开头的区别/判断是否同一网段 简单来说在公司或企业内部看到的就基本都是内网IP,ABC三类IP地址里的常见IP段. 每个IP地址都包含两部分,即网络号 ...

  8. C#学习单向链表和接口 IList<T>

    C#学习单向链表和接口 IList<T> 作者:乌龙哈里 时间:2015-11-04 平台:Window7 64bit,Visual Studio Community 2015 参考: M ...

  9. 在eclipse中生成实体类

    1.在eclipse的windows中选中preferences在查询框中输入driver definition 2.点击add在Name/type中选中mysql jdbc driver 5.1然后 ...

  10. jquery里面的attr和css来设置轮播图竟然效果不一致

    /*封装$*/ // window.$=HTMLElement.prototype.$=function(selector){ // var elems=(this==window?document: ...