关于声音的播放与暂停等处理

法一:

PlaySound(MAKEINTRESOURCE(IDR_WAVE_GAME),AfxGetResourceHandle(),SND_RESOURCE|SND_ASYNC);

//IDR_WAVE_GAME为声音资源的ID,声音为wave类型。

 

法二:

1.在头文件中声明头文件

#include "mmsystem.h"//声音效果
//#pragma comment(lib,"WINMM.LIB")
//#pragma comment(lib,"msimg32.lib")

 

声明变量
 MCIDEVICEID m_count;   //设备ID

 

2.播放声音

void CLLKGame::playBgMusic()
{
 MCI_OPEN_PARMS mciopenparms;//打开
 MCI_PLAY_PARMS mciplayparms;//播放
 mciopenparms.lpstrElementName="res\\bg.mid";//播放路径,文件为mid格式
 mciopenparms.lpstrDeviceType=NULL;//文件类型
 MCIERROR ret = mciSendCommand(0,MCI_OPEN,MCI_DEVTYPE_WAVEFORM_AUDIO,
  (DWORD)(LPVOID)&mciopenparms);//向MCI设备发送命令消息
 
 if(ret != 0)
 {
  WORD err = LOWORD(ret);
  char strText[1024] = {0};
  mciGetErrorString(err,strText,sizeof(strText));
  MessageBox(strText);
 }
 m_count=mciopenparms.wDeviceID;
 mciplayparms.dwCallback=(DWORD)GetSafeHwnd();  
 mciplayparms.dwFrom=0;
 ret = mciSendCommand(m_count,MCI_PLAY,MCI_FROM| MCI_NOTIFY ,(DWORD)(LPVOID)& mciplayparms);
 if(ret != 0)
 {
  WORD err = LOWORD(ret);
  char strText[1024] = {0};
  mciGetErrorString(err,strText,sizeof(strText));
  MessageBox(strText);
 } 
}

// 以上均由(http://blog.sina.com.cn/s/blog_6a1cdb3f0101irtd.html 提供)


void CText_dialogDlg::changeMusicStatus()
{
unsigned long num;
if(!musicIsOn)
{
num = mciSendCommand(m_count,MCI_PLAY,0,NULL);  //播放
}else
num = mciSendCommand(m_count,MCI_PAUSE,0,NULL); //暂停
CString str;
str.Format(_T("num is %d"), num);
MessageBox(str);
musicIsOn = !musicIsOn;
if(num > 300)                  //当文件播放完毕 num=302;
{

//关闭后重启;
mciSendCommand(m_count,MCI_CLOSE,0,NULL);
playBgMusic();
}
}





后话:有时候会遇见:

contactsDlg.obj : error LNK2001: unresolved external symbol __imp__mciGetErrorStringA@12
contactsDlg.obj : error LNK2001: unresolved external symbol __imp__mciSendCommandA@16
Debug/contacts.exe : fatal error LNK1120: 2 unresolved externals

其实下面的语句有时候是不可少的:

#include "mmsystem.h"//声音效果
#pragma comment(lib,"WINMM.LIB")
#pragma comment(lib,"msimg32.lib")

你可能感兴趣的:(MFC)