以下是基于 mciSendCommand 的 C++ 音乐播放类实现代码。
PlayWave.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;
};
PlayWave.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::~() {
(m_ElementID) {
();
}
(m_DeviceID) {
();
}
}
{
DWORD dwResult = ;
(m_DeviceID == ) {
MCI_OPEN_PARMS mciInitParms;
mciInitParms.lpstrDeviceType = (LPTSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
dwResult = (, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_WAIT, (DWORD)(LPVOID)&mciInitParms);
m_DeviceID = mciInitParms.wDeviceID;
}
dwResult;
}
{
DWORD dwResult = ;
(m_DeviceID) {
dwResult = (m_DeviceID, MCI_CLOSE, , );
}
m_DeviceID = ;
dwResult;
}
{
MCI_OPEN_PARMS mciOpenParms;
(&mciOpenParms, , (MCI_OPEN_PARMS));
mciOpenParms.lpstrElementName = pFileName;
DWORD dwResult = ;
dwResult = (m_DeviceID, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)(LPVOID)&mciOpenParms);
(!dwResult) {
m_ElementID = mciOpenParms.wDeviceID;
MCI_PLAY_PARMS mciPlayParms;
mciPlayParms.dwCallback = (DWORD)hWnd;
dwResult = (m_ElementID, MCI_PLAY, MCI_DGV_PLAY_REPEAT, (DWORD)(LPVOID)&mciPlayParms);
}
dwResult;
}
{
DWORD dwResult = ;
(m_ElementID) {
dwResult = (m_ElementID, MCI_CLOSE, , );
m_ElementID = ;
}
dwResult;
}
{
DWORD dwResult = ;
BOOL bPlayMode = TRUE;
(m_ElementID) {
(bPlayMode) {
dwResult = (m_ElementID, MCI_PAUSE, , );
dwResult = WAVE_PAUSE;
} {
dwResult = (m_ElementID, MCI_RESUME, , );
dwResult = WAVE_RESUME;
}
bPlayMode = !bPlayMode;
}
dwResult;
}

