MFC下MCI的使用播放音乐
最近研究了一下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的使用播放音乐的更多相关文章
- H5页面在IOS下不会自动播放音乐的坑
document.addEventListener(‘DOMContentLoaded‘, function () { function audioAutoPlay() { var audio = d ...
- C# 播放音乐
用 .NET 自带的类库 System.Media 下面的 SoundPlayer 来播放音乐的方式,此种方式使用托管代码,应该是更为可取的方式吧 使用起来非常简单,下面稍作说明: . 支持同步.异步 ...
- 在Linux终端命令行下播放音乐的命令(Ubuntu)
现在的 Linux 桌面已经发展的很好了,在桌面下播放音乐操作起来也很简单.那么我们还记得在桌面不是那么好的时候我们是怎么播放音乐的么?哎,我是想不起来了,实在是太难了. 不过现在我们可以先安装一个小 ...
- MediaPlayer音乐播放器、上一首、下一首、播放、停止、自动下一首、进度条
本文介绍MediaPlayer的使用.MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用Med ...
- Android使用的webcview中带有音乐播放控件,在关闭或分享时处于界面不可见状态下,声音仍在播放的问题解决
一. 问题出现原因 我们在做APP分享时,分享webview加载带有音乐播放控件的网页.当弹出分享界面,webview的网页处于后台状态或关闭该网页时,音乐声仍在播放.出现该类现象使我 ...
- 在Linux终端命令行下播放音乐的命令
现在的 Linux 桌面已经发展的很好了,在桌面下播放音乐操作起来也很简单.那么我们还记得在桌面不是那么好的时候我们是怎么播放音乐的么?哎,我是想不起来了,实在是太难了. 不过现在我们可以先安装一个小 ...
- pcDuino-V2利用madplay播放音乐
在pcDuino的UBUNTU系统下,打开控制台,利用apt-get来下载madplay软件. sudo apt-get install madplay 播放音乐: madplay xxx.mp3 x ...
- matlab播放音乐
最近在做计算,写了一些matlab代码,脑壳还疼,所以决定发挥一下逗B精神,写一个程序玩一下. 想了想,既然写代码的时候喜欢听歌,而且我的电脑打开网易音乐的速度巨慢(不知道为什么..),那些一个程序直 ...
- go语言让windows发出声音,或者播放音乐
go语言让windows发出声音,或者播放音乐的例子:会发出alert警告的声音 ( 这是我应群员的求助写的, 如果你需要了解其中的调用原理或过程 或更多go语言调用win32api的资料,加群: 2 ...
随机推荐
- iOS缓存
存储缓存: 第三方应用只能把信息保存在应用程序的沙盒中.因为缓存数据不是用户产生的,所以它应该被保存在NSCachesDirectory,而不是NSDocumentsDirectory.为缓存数据创建 ...
- Ubuntu火狐、Chromium等浏览器安装flash插件
1.打开系统设置->软件和更新->其他软件,勾选Canonical合作伙伴,输入密码,重新载入更新 2.打开终端,按装插件 sudo apt install adobe-flashplug ...
- sim808模块收发送短信
一,简介 SIM 808发送短信分text模式和PDU模式.text模式已ascii码发送短信,这种模式比较简单,发送命令AT+CMGF=1就可以发送短信,而PDU模式比较复杂,首先发送命令AT+CM ...
- MAMP、wordpress安装
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Helvetica } p.p4 { margin: ...
- js 冒泡排序
var arr = []; for(var i=0; i<100000; i++){ arr.push(parseInt(Math.random()*100)) }; var t1 = Date ...
- 子字符查找KMP算法 - 子串自匹配索引表
public static int[] kmpTable(char[] seq) { int[] tbl = new int[seq.length]; tbl[0] = 1; for (int i = ...
- 【Python之路】第八篇--Python基础之网络编程
Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- 前端好的工具集推荐 lodash
原来用 backbone 的时候, 感觉 underscore 是一个好的工具集,顿时感觉不错,不用自己一直去封装一些组件. 直到我遇到了 lodash,一只发现 web 项目中有依赖这个库的,但是一 ...
- spring可以get到bean,注入却为空
使用spring的时候,已经将要用的bean注入到容器之中却发现在程序中总是报null,后来发现是因为当前的启动类没有在容器之中,所以用上下文可以get到,但是注入却无效
- 本地yum库的搭建
1.建立yum服务器 yum服务器可以使用http或者ftp的方式,我们这里选择使用http的方式进行,需要先进行httpd的安装 # yum install httpd 在本地建立包目录 # mkd ...