PlaySound界面最小化后不播放(失去焦点后不播放)

 // Load the wave file into a DirectSound buffer
 if( FAILED( hr = g_pSoundManager->Create( &g_pSound, strFileName, 0, GUID_NULL ) ) )

改为:
 if( FAILED( hr = g_pSoundManager->Create( &g_pSound, strFileName, DSBCAPS_GLOBALFOCUS, GUID_NULL ) ) )

 

这里要传递参数给CreateSoundBuffer(LPCDSBUFFERDESC pcDSBufferDesc,LPDIRECTSOUNDBUFFER *ppDSBuffer,LPUNKNOWN pUnKOuter);

DSBUFFERDESC 结构体定义如下:

struct {

DWORD dwSize;//结构体大小

DWORD dwFlags;//缓冲区的用途标志

DWORD dwBufferBytes;//缓冲区大小(如果是设置主缓冲区必须设置为0)

DWORD dwReserved;//保留未用,必须为0

LPWAVEFORMATEX lpwfxFormat;//声音的格式属性

GUID    guid3DAlgorithm;//3D声效算法,一般不必理会

};

dwflag 参数的标志说明:

DSBCAPS_CTRL3D   //缓冲区具有的3D音效控制能力,不能与DSBCAPS_CTRLPAN一起使用

DSBCAPS_CTRLFREQUENCY   //可设置采样频率

DSBCAPS_CTRLFX  //缓冲区支持特效处理,但缓冲区必须够大,可容纳更多的数据

DSBCAPS_CTRLPAN  //缓冲区可以控制声道

DSBCAPS_CTRLPOSITIONNOTIFY  //缓冲区具有播放位置通知能力

DSBCAPS_CTRLVOLUME  //缓冲区可设置音量大小

DSBCAPS_GLOBALFOCUS  //缓冲是一个全局声音资源,当前程序切换到其他程序依然可以继续播放.

DSBCAPS_LOCDEFER  //缓冲区可绑定硬件内存或者软件内存来播放声音

DSBCAPS_LOCHARDWARE  //缓冲区必须使用硬件的混声器,如果不支持硬件内存或者混声器,都会导致创建缓冲区失败.

DSBCAPS_LOCSOFTWARE  //缓冲区使用软件内存或者使用软件混音

DSBCAPS_MUTE3DATMAXDISTANCE  //超过声音可听的最大距离,将停止播放声音

DSBCAPS_PRIMARYBUFFER  //说明缓冲区的为主缓冲区(如果没说明,则用作次缓冲区)

DSBCAPS_STATIC  //自动使用硬件内存做缓冲区

DSBCAPS_STICKYFOCUS  //当程序切换到其他不使用DIRECTSOUND 的程序时,缓冲区继续播放声音,但无法如常进行其他处理

你可能感兴趣的:(算法,struct,File,null)