📄 sound.cpp
字号:
// sound.cpp : implementation file
//
#include <afxwin.h>
#include "sound.h"
#include <io.h>
#include <direct.h>
#include <mmsystem.h>
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSound
IMPLEMENT_SERIAL(CSound, CObject, 0) // Schema number.
CSound::CSound()
{
m_pSoundImage = NULL;
hLib = NULL;
}
CSound::~CSound()
{
}
/////////////////////////////////////////////////////////////////////////////
// CSound serialization
void CSound::Serialize(CArchive& ar)
{
ASSERT(1); // Not supported.
}
/////////////////////////////////////////////////////////////////////////////
// CSound commands
void CSound::DLL_link()
{
hLib = ::LoadLibrary("snd_nIS.dll");
}
void CSound::DLL_unlink()
{
if (hLib)
::FreeLibrary(hLib);
}
BOOL CSound::Load(WORD wResid)
{
ASSERT(wResid);
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hrsrc = ::FindResource(hInst, MAKEINTRESOURCE(wResid), "WAVE");
if (!hrsrc)
{
TRACE("WAVE resource not found");
return FALSE;
}
HGLOBAL hg = LoadResource(hInst, hrsrc);
if (!hg)
{
TRACE("Failed to load WAVE resource");
return FALSE;
}
m_pSoundImage = (BYTE *) LockResource(hg);
ASSERT(m_pSoundImage);
return TRUE;
}
void CSound::Play()
{
if (!m_pSoundImage)
{
TRACE("Nothing to play");
return;
}
::sndPlaySound((LPCSTR) m_pSoundImage, SND_MEMORY | SND_ASYNC | SND_NODEFAULT);
}
void CSound::Play(char *pStrName)
{
::PlaySound(pStrName, NULL, SND_FILENAME | SND_ASYNC | SND_NODEFAULT);
}
void CSound::DLL_play(int iSndRef)
{
if (hLib)
{
HRSRC hrsrc = ::FindResource(hLib, MAKEINTRESOURCE( iSndRef ), "WAVE");
if (!hrsrc) return;
HGLOBAL hg = LoadResource(hLib, hrsrc);
BYTE *m_pSoundImage = (BYTE *) ::LockResource(hg);
if (m_pSoundImage)
::sndPlaySound((LPCSTR) m_pSoundImage, SND_MEMORY | SND_ASYNC | SND_NODEFAULT);
}
}
void CSound::DLL_play(char *szSndName, BOOL bPlaySync /*=FALSE*/)
{
if (hLib)
{
HRSRC hrsrc = ::FindResource(hLib, szSndName, "WAVE");
if (!hrsrc) return;
HGLOBAL hg = LoadResource(hLib, hrsrc);
BYTE *m_pSoundImage = (BYTE *) ::LockResource(hg);
if (m_pSoundImage)
::sndPlaySound((LPCSTR) m_pSoundImage, SND_MEMORY | (bPlaySync ? SND_SYNC : SND_ASYNC) | SND_NODEFAULT);
}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
BOOL CSound::PlayResourceWav(char *szName, BOOL bWait)
{
HANDLE hResInfo,hRes;
LPSTR lpRes;
BOOL bResult;
hResInfo = ::FindResource(NULL,szName, "WAVE");
if (!hResInfo) return FALSE;
hRes = ::LoadResource(NULL, (HRSRC__ *) hResInfo); // Load the wave resource.
if (!hRes) return FALSE;
/*
Lock the resource while playing so windows can't dump it.
*/
lpRes = (char *) ::LockResource(hRes);
if (lpRes)
{
if (bWait == TRUE)
bResult = ::PlaySound(szName, AfxGetInstanceHandle(), SND_SYNC | SND_RESOURCE);
else
bResult = ::PlaySound(szName,AfxGetInstanceHandle(),SND_ASYNC | SND_RESOURCE);
::UnlockResource(hRes);
}
else
bResult = 0;
::FreeResource(hRes);
return bResult;
}
BOOL CSound::PlayFileWav(char *szFilename, BOOL bWait)
{
BOOL bResult;
struct _finddata_t filestruct;
long hnd;
hnd = _findfirst(szFilename, &filestruct);
if ((hnd == -1)) return FALSE;
if (bWait == TRUE)
bResult = ::PlaySound(szFilename,NULL,SND_SYNC | SND_FILENAME);
else
bResult = ::PlaySound(szFilename,NULL,SND_ASYNC | SND_FILENAME);
return bResult;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -