MFC下MCI的使用播放音乐
2014-08-07 18:11
357 查看
最近研究了一下MFC下的音乐的播放,主要使用了MCI
1.需要包含的库文件
在链接资源里(link)添加库文件VFW32.lib winmm.lib
2.包含的头文件
3.需要调用的成员变量和成员函数的声明、定义
4.添加消息响应
5.打开相应的文件
方法一:
方法二:
6.音乐的播放
方法一:
方法二:
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行
方法二:添加消息响应函数
以上所述经过测试!
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] = {0}; 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(0, MCI_OPEN, MCI_OPEN_ELEMENT|MCI_WAIT|MCI_OPEN_SHAREABLE, (DWORD)(LPVOID)&mciOP); if (dwReturn == 0) { m_wID = mciOP.wDeviceID; } else { m_wID = NULL; } CyclePlay(); } void CMp3Dlg::CyclePlay() { MCI_PLAY_PARMS PlayParms; PlayParms.dwCallback = (DWORD)GetSafeHwnd(); PlayParms.dwFrom = 0; //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 = 0; 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); } }
以上所述经过测试!
相关文章推荐
- 使用MCI播放音乐文件,MFC音乐播放
- MFC下MCI的使用播放音乐
- 使用MCI播放音乐文件,MFC音乐播放
- 使用MCI接口播放音乐
- 定时播放音乐程序之三:MCI设备的播放和控制
- C#中使用Windows Media Player播放音乐的方法
- win mobile 5播放mp3音乐的方法(2)--libmad库的使用篇
- C#、VB.NET 使用System.Media.SoundPlayer播放音乐
- 使用MCI播放媒体文件
- (转载)MFC中使用OpenCV捕捉摄像头视频并在Image控件中播放
- win mobile 5播放mp3音乐的方法(2)--libmad库的使用篇
- 使用MediaPlayer控件播放MP3等音乐文件
- 【Android】简易音乐播放器(介绍使用Service和Broadcast播放音乐文件)
- Android Service使用方法--简单音乐播放实例
- 使用 foobar2000 的 Equalizer 将音乐播放出最佳效果
- 使用IrrKlang播放音乐
- 使用Javascript控制视频或音乐连续播放
- msn空间中使用电子邮件发日志项和添加音乐播放模块
- win mobile 5播放mp3音乐的方法(2)--libmad库的使用篇
- 使用jplayer来制作音乐播放插件