MFC中MessageBeep和sndPlaySound分别用于播放系统提示音和自定义声音。
MFC中MessageBeep与sndPlaySound播放声音函数使用
在MFC编程中,我们经常需要播放一些提示音或者系统声音,这时候,我们可以使用MFC提供的两个函数:MessageBeep和sndPlaySound来实现这个功能,下面,我们将详细介绍这两个函数的使用方法和注意事项。
MessageBeep函数
1、函数原型
UINT MessageBeep(UINT uType);
2、参数说明
uType:指定要播放的声音类型,可以是以下值之一:
MB_ICONINFORMATION:信息图标提示音
MB_OK:操作成功提示音
MB_ERROR:操作失败提示音
MB_WARNING:警告提示音
MB_QUESTION:询问提示音
MB_ABORTRETRYIGNORE:中止、重试、忽略提示音
MB_YESNOCANCEL:是、否、取消提示音
MB_RETRYCANCEL:重试、取消提示音
MB_OKCANCEL:确定、取消提示音
MB_APPLMODAL:应用程序模态提示音
MB_USERICON:用户自定义图标提示音
MB_ICONEXCLAMATION:感叹号图标提示音
MB_ICONERROR:错误图标提示音
MB_ICONQUESTION:问号图标提示音
MB_ICONSTOP:停止图标提示音
MB_INFORMATION:信息图标提示音
MB_MOUSEBUTTON:鼠标按键提示音
MB_SETFOREGROUND:设置前台提示音
MB_TOpmoST:置顶提示音
MB_SERVICENOTIFICATION:服务通知提示音
3、返回值
返回值为一个无符号整数,表示消息框的响应代码,如果函数执行成功,返回值为0;否则,返回值为非零。
sndPlaySound函数
1、函数原型
BOOL sndPlaySound(LPCTSTR pszSound, UINT uFlags);
2、参数说明
pszSound:指向要播放的声音文件的路径,可以是绝对路径或相对路径,如果为NULL,则不播放声音。
uFlags:指定播放声音的方式和选项,可以是以下值的组合:SND_SYNC、SND_ASYNC、SND_FIlenAME、SND_ALIAS等,具体含义如下:
SND_SYNC:同步播放声音,即等待声音播放完成后再继续执行后续代码,默认值。
SND_ASYNC:异步播放声音,即不等待声音播放完成就继续执行后续代码,可以通过GetLastError()函数获取错误码。
SND_FILENAME:指定要播放的声音文件的完整路径,注意,此标志需要与SND_MEMORY或SND_LOOP标志组合使用。
SND_MEMORY:指定要播放的声音数据存储在内存缓冲区中,注意,此标志需要与SND_FILENAME标志或SND_LOOP标志组合使用,还需要提供一个指向内存缓冲区的指针和缓冲区的大小。
SND_LOOP:使声音循环播放,直到调用PlaySound函数停止为止,注意,此标志需要与SND_FILENAME或SND_MEMORY标志组合使用,还需要提供一个指向内存缓冲区的指针和缓冲区的大小,如果提供了SND_FILENAME标志,则该缓冲区中的数据应为声音文件的前44字节(即RIFF格式),如果提供了SND_MEMORY标志,则该缓冲区中的数据应为声音文件的数据部分。
3、返回值
返回值为布尔值,表示播放声音是否成功,如果成功,返回TRUE;否则,返回FALSE,可以通过GetLastError()函数获取错误码。
注意事项
1、在多线程环境下使用这两个函数时,需要注意线程安全问题,因为这两个函数都涉及到全局资源的共享,所以可能会出现竞争条件,为了避免这种情况,可以使用临界区(CRITICAL_SECTION)或其他同步机制来保护这两个函数的调用。
2、在调用sndPlaySound函数时,需要注意传递给它的参数是否正确,特别是在使用SND_FILENAME标志时,需要确保提供了正确的文件路径和大小,还需要注意处理可能的错误情况,例如文件不存在、文件损坏等,可以通过检查GetLastError()函数的返回值来判断错误原因。