本文将提供用mciSendCommand实现的简单音乐播放类
头文件和CPP的实现如下:
.h
#pragma once
#include "mmsystem.h"
#define WAVE_PAUSE 1
#define WAVE_RESUME 2
class CPlayWave
{
public:
CPlayWave(void);
~CPlayWave(void);
DWORD InitDevice();
DWORD TerminalDevice();
DWORD Play(HWND hWnd, LPCTSTR pFileName);
DWORD Stop();
DWORD Pause();
protected:
MCIDEVICEID m_DeviceID;
MCIDEVICEID m_ElementID;
};
.cpp
#include "StdAfx.h"
#include "PlayWave.h"
#include <Digitalv.h>
#pragma comment(lib, "winmm.lib")
CPlayWave::CPlayWave(void)
{
m_DeviceID = 0;
m_ElementID = 0;
InitDevice();
}
CPlayWave::~CPlayWave(void)
{
if (m_ElementID)
{
Stop();
}
if (m_DeviceID)
{
TerminalDevice();
}
}
DWORD CPlayWave::InitDevice()
{
DWORD dwResult = 0;
if (m_DeviceID == 0)
{
MCI_OPEN_PARMS mciInitParms;
mciInitParms.lpstrDeviceType = (LPTSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
dwResult = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_WAIT,
(DWORD)(LPVOID)&mciInitParms);
m_DeviceID = mciInitParms.wDeviceID;
}
return dwResult;
}
DWORD CPlayWave::TerminalDevice()
{
DWORD dwResult = 0;
if (m_DeviceID)
{
dwResult = mciSendCommand(m_DeviceID, MCI_CLOSE, NULL, NULL);
}
m_DeviceID = 0;
return dwResult;
}
DWORD CPlayWave::Play(HWND hWnd, LPCTSTR pFileName)
{
MCI_OPEN_PARMS mciOpenParms;
memset(&mciOpenParms, 0, sizeof(MCI_OPEN_PARMS));
mciOpenParms.lpstrElementName = pFileName;
DWORD dwResult = 0;
dwResult = mciSendCommand(m_DeviceID, MCI_OPEN, MCI_OPEN_ELEMENT,
(DWORD)(LPVOID)&mciOpenParms);
if (!dwResult)
{
m_ElementID = mciOpenParms.wDeviceID;
MCI_PLAY_PARMS mciPlayParms;
mciPlayParms.dwCallback = (DWORD)hWnd;
dwResult = mciSendCommand(m_ElementID, MCI_PLAY, MCI_DGV_PLAY_REPEAT/*MCI_NOTIFY*/,
(DWORD)(LPVOID)&mciPlayParms);
}
return dwResult;
}
DWORD CPlayWave::Stop()
{
DWORD dwResult = 0;
if (m_ElementID)
{
dwResult = mciSendCommand(m_ElementID, MCI_CLOSE, NULL, NULL);
m_ElementID = 0;
}
return dwResult;
}
DWORD CPlayWave::Pause()
{
DWORD dwResult = 0;
static BOOL bPlayMode = TRUE;
if (m_ElementID)
{
if (bPlayMode)
{
dwResult = mciSendCommand(m_ElementID, MCI_PAUSE, NULL, NULL);
dwResult = WAVE_PAUSE;
}
else
{
dwResult = mciSendCommand(m_ElementID, MCI_RESUME, NULL, NULL);
dwResult = WAVE_RESUME;
}
bPlayMode = !bPlayMode;
}
return dwResult;
}
该类实现了音乐的播放,暂停,恢复,停止等功能。