⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wave.cpp

📁 这是一个俄罗斯方块的源代码
💻 CPP
字号:
// Wave.cpp


#include "stdafx.h"
#include "Wave.h"

CWave::CWave()
{

	InitVars();

}

CWave::CWave( const char *lpszFilename )
{

	InitVars();
	Load( lpszFilename );

}

CWave::CWave( const char *lpszResID, HINSTANCE hInstance )
{

	InitVars();
	Load( lpszResID, hInstance );

}

CWave::CWave( int nResID, HINSTANCE hInstance )
{

	InitVars();
	Load( nResID, hInstance );

}

void CWave::InitVars( void )
{

	m_bLoaded = FALSE;
	m_lpSoundData = NULL;
	m_hResHandle = NULL;
	m_nDevices = waveOutGetNumDevs();

}

CWave::~CWave()
{

	Close();

}

int CWave::DeviceCount( void )
{

	return( m_nDevices );

}

BOOL CWave::IsLoaded( void )
{

	return( m_bLoaded );

}

BOOL CWave::Load( const char *lpszFilename )
{

	Close();

	CFile File;
	if( !File.Open( lpszFilename, CFile::modeRead ) )
		return( FALSE );

	DWORD dwFileLength = File.GetLength();
	m_lpSoundData = new char [dwFileLength];
	if( m_lpSoundData == NULL )
		return( FALSE );

	if( File.Read( m_lpSoundData, dwFileLength )
		!= dwFileLength )
		return( FALSE );

	m_bLoaded = TRUE;

	return( TRUE );

}

BOOL CWave::Load( const char *lpszResID, HINSTANCE hInstance )
{

	Close();

	HANDLE hResInfo;
	hResInfo = FindResource ( hInstance, lpszResID, "WAVE" );
	if( hResInfo == NULL )
		return( FALSE );

	m_hResHandle = LoadResource( hInstance, (HRSRC) hResInfo );
	if( m_hResHandle == NULL )
		return( FALSE );

	m_lpSoundData = (char *) LockResource( m_hResHandle );
	if( m_lpSoundData == NULL )
		return( FALSE );

	m_bLoaded = TRUE;

	return( TRUE );

}

BOOL CWave::Load( int nResID, HINSTANCE hInstance )
{

	Close();

	HANDLE hResInfo;
	hResInfo = FindResource ( hInstance,
		MAKEINTRESOURCE( nResID ), "WAVE" );
	if( hResInfo == NULL )
		return( FALSE );

	m_hResHandle = LoadResource( hInstance, (HRSRC) hResInfo );
	if( m_hResHandle == NULL )
		return( FALSE );

	m_lpSoundData = (char *) LockResource( m_hResHandle );
	if( m_lpSoundData == NULL )
		return( FALSE );

	m_bLoaded = TRUE;

	return( TRUE );

}

BOOL CWave::Play( BOOL bLoop )
{

	if( !m_bLoaded )
		return( FALSE );

	Stop();
	
	DWORD dwFlags = SND_MEMORY | SND_ASYNC | SND_NODEFAULT;
	if( bLoop )
		dwFlags |= SND_LOOP;

	return( PlaySound( m_lpSoundData, NULL, dwFlags ) );

}

BOOL CWave::PlayFromDisk( const char *lpszFilename )
{

	Stop();
	
	return( PlaySound( lpszFilename, NULL,
		SND_FILENAME | SND_SYNC | SND_NODEFAULT ) );

}

BOOL CWave::PlayFromRes( const char *lpszResID,
						HINSTANCE hInstance )
{

	return( PlaySound( lpszResID, hInstance,
		SND_RESOURCE | SND_SYNC | SND_NODEFAULT ) );

}

BOOL CWave::PlayFromRes( int nResID, HINSTANCE hInstance )
{

	return( PlaySound( MAKEINTRESOURCE( nResID ),
		hInstance, SND_RESOURCE | SND_SYNC | SND_NODEFAULT ) );

}

BOOL CWave::Stop( void )
{

	return( PlaySound( NULL, NULL, NULL ) );

}

BOOL CWave::Close( void )
{

	Stop();

	if( m_hResHandle  != NULL ){
		UnlockResource( m_hResHandle );
		FreeResource( m_hResHandle );
		}
	else if( m_lpSoundData != NULL )
		delete [] m_lpSoundData;

	m_hResHandle = NULL;
	m_lpSoundData = NULL;

	return( TRUE );

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -