public: DWORD OpenDevice();
DWORD CloseDevice();
DWORD Play(CWnd *pParentWnd,LPCSTR pFileName);
DWORD Stop(); //Implementation protected:
void DisplayErrorMsg(DWORD dwError); //Members protected: MCIDEVICEID m_nDeviceID;
MCIDEVICEID m_nElementID;
};
//Cwave类的实现代码,Cwave.cpp
#include
#include "cwave.h"
CWave::CWave(){
m_nDeviceID=0;
m_nElementID=0;
}
CWave::~CWave()
{
if(m_nElementID)
Stop();
if(m_nDeviceID) CloseDevice();
}
DWORD CWave::OpenDevice()
{
DWORD dwResult=0;
if (m_nDeviceID) MCI_OPEN_PARMS mciOpenParms;
mciOpenParms.lpstrDeviceType=(LPSTR)MCI_DEVTYPE_WAVEFORM_AUDIO; //open the wave device
dwResult=mciSendCommand(NULL,MCI_OPEN, MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_WAIT, (DWORD)(LPVOID)&mciOpenParms); //save device identifier,will use eith other MCI commands
m_nDeviceID=mciOpenParms.wDeviceID; //display error message if failed if(dwResult)
DisplayErrorMsg(dwResult);
} //return result of MCI operation return dwResult; }
DWORD CWave::CloseDevice()
{
DWORD dwResult=0; //close if currently open if(m_nDeviceID) { //close the MCI device
dwResult=mciSendCommand(m_nDeviceID,MCI_CLOSE,NULL,NULL); //display error message if failed
if(dwResult) DisplayErrorMsg(dwResult); //set identifier to close state else m_nDeviceID=0; } //return result of MCI operation return dwResult;
}
DWORD CWave::Play(CWnd* pWnd,LPCSTR pFileName)
{
MCI_OPEN_PARMS mciOpenParms; //initialize structure
memset(&mciOpenParms,0,sizeof(MCI_OPEN_PARMS)); //set the WAV file name to be played
mciOpenParms.lpstrElementName=pFileName; //first open the device DWORD
dwResult=mciSendCommand(m_nDeviceID,MCI_OPEN, MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpenParms); //display error message if failed if(dwResult)
DisplayErrorMsg(dwResult); //if successful,instruct the device to play the WAV file else { //save element indentifier m_nElementID=mciOpenParms.wDeviceID; MCI_PLAY_PARMS mciPlayParms; //set the window that will receive notification message
mciPlayParms.dwCallback=(DWORD)pWnd->m_hWnd; //instruct device to play file
dwResult=mciSendCommand(m_nElementID,MCI_PLAY, MCI_NOTIFY,(DWORD)(LPVOID)&mciPlayParms); //display error and close element if failed if(dwResult) { DisplayErrorMsg(dwResult); Stop(); }
} //return result of MCI operation return dwResult; }
DWORD CWave::Stop()
{
DWORD dwResult=0; //close if element is currently open if(m_nElementID) {
dwResult=mciSendCommand(m_nElementID,MCI_CLOSE,NULL,NULL); //display error message if failed
if(dwResult) DisplayErrorMsg(dwResult); //set identifier to closed state else
m_nElementID=0;
return dwResult;
}
void CWave::DisplayErrorMsg(DWORD dwError)
{ //check if there was an error
if(dwError)
{ //character string that contains error message
char szErrorMsg[MAXERRORLENGTH];