Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

101 lines
2.8 KiB

/***************************************************************************/
/** Microsoft Windows **/
/** Copyright(c) Microsoft Corp., 1991, 1992 **/
/***************************************************************************/
/****************************************************************************
sound.cpp
Aug 92, JimH
May 93, JimH chico port
SoundInit() just verifies that a wave driver is loaded.
HeartsPlaySound() plays the sound given a resource id.
****************************************************************************/
#include "hearts.h"
#include <mmsystem.h>
#include "main.h"
#include "resource.h"
#include "debug.h"
/****************************************************************************
SoundInit()
returns TRUE if sound is enabled.
****************************************************************************/
BOOL CMainWindow::SoundInit()
{
return (::waveOutGetNumDevs() > 0);
}
/****************************************************************************
CMainWindow::HeartsPlaySound(id)
Plays the specified sound from the resource file.
The static variable hRes is used as a flag to know if memory has been
allocated and locked for the sound. If hRes is non-zero, a sound is
still playing, or at least the memory for the sound has not been unlocked
and freed. The application must call HeartsPlaySound(NULL, 0) to free this
memory before exiting. (The game destructor does this. It also
happens at the end of each hand.)
****************************************************************************/
BOOL CMainWindow::HeartsPlaySound(int id)
{
static HRSRC hRes = 0;
if (!bHasSound) // check for sound capability
return TRUE;
if (id == OFF) // request to turn off sound
{
if (hRes == 0) // hRes != 0 if a sound has been played...
return TRUE; // and not freed.
sndPlaySound(NULL, 0); // make sure sound is stopped
UnlockResource(hRes);
FreeResource(hRes);
hRes = 0;
return TRUE;
}
if (!bSoundOn) // has user toggled sound off?
return TRUE;
// User has requested a sound. Check if previous sound was freed.
if (hRes != 0)
HeartsPlaySound(OFF);
BOOL bReturn;
HINSTANCE hInst = AfxGetInstanceHandle();
HRSRC hResInfo = FindResource(hInst, MAKEINTRESOURCE(id), TEXT("WAVE"));
if (!hResInfo)
return FALSE;
hRes = (HRSRC) ::LoadResource(hInst, hResInfo);
if (!hRes)
return FALSE;
LPTSTR lpRes = (LPTSTR) ::LockResource(hRes);
if (lpRes)
bReturn = ::sndPlaySound(lpRes, SND_MEMORY | SND_ASYNC | SND_NODEFAULT);
else
bReturn = FALSE;
return bReturn;
}