亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? direct~1.cpp

?? 俄羅斯方塊源代碼
?? CPP
字號(hào):
/////////////////////////////////////////////////////////////////////////////
// This file is part of the completely free tetris clone "CGTetris".
//
// This is free software.
// You may redistribute it by any means providing it is not sold for profit
// without the authors written consent.
//
// No warrantee of any kind, expressed or implied, is included with this
// software; use at your own risk, responsibility for damages (if any) to
// anyone resulting from the use of this software rests entirely with the
// user.
/////////////////////////////////////////////////////////////////////////////


// DirectSound.cpp: implementation of the CDirectSound class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DirectSound.h"

// The following macro is defined since DirectX 5, but will work with
// older versions too.
#ifndef DSBLOCK_ENTIREBUFFER
	#define DSBLOCK_ENTIREBUFFER        0x00000002
#endif

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

static void DSError( HRESULT hRes ) {
	switch(hRes) {
		case DS_OK: TRACE0("NO ERROR\n"); break;
		case DSERR_ALLOCATED: TRACE0("ALLOCATED\n"); break;
		case DSERR_INVALIDPARAM: TRACE0("INVALIDPARAM\n"); break;
		case DSERR_OUTOFMEMORY: TRACE0("OUTOFMEMORY\n"); break;
		case DSERR_UNSUPPORTED: TRACE0("UNSUPPORTED\n"); break;
		case DSERR_NOAGGREGATION: TRACE0("NOAGGREGATION\n"); break;
		case DSERR_UNINITIALIZED: TRACE0("UNINITIALIZED\n"); break;
		case DSERR_BADFORMAT: TRACE0("BADFORMAT\n"); break;
		case DSERR_ALREADYINITIALIZED: TRACE0("ALREADYINITIALIZED\n"); break;
		case DSERR_BUFFERLOST: TRACE0("BUFFERLOST\n"); break;
		case DSERR_CONTROLUNAVAIL: TRACE0("CONTROLUNAVAIL\n"); break;
		case DSERR_GENERIC: TRACE0("GENERIC\n"); break;
		case DSERR_INVALIDCALL: TRACE0("INVALIDCALL\n"); break;
		case DSERR_OTHERAPPHASPRIO: TRACE0("OTHERAPPHASPRIO\n"); break;
		case DSERR_PRIOLEVELNEEDED: TRACE0("PRIOLEVELNEEDED\n"); break;
		default: TRACE1("%lu\n",hRes);break;
	}
}

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

LPDIRECTSOUND CDirectSound::m_lpDirectSound;
DWORD CDirectSound::m_dwInstances;


CDirectSound::CDirectSound()
{
	m_lpDirectSound = 0;
	m_pDsb = 0;
	m_pTheSound = 0;
	m_dwTheSound = 0;
	m_bEnabled = TRUE;

	++m_dwInstances;
}

CDirectSound::~CDirectSound()
{
	if( m_pDsb )
		m_pDsb->Release();

	if( !--m_dwInstances && m_lpDirectSound ) {
		m_lpDirectSound->Release();
		m_lpDirectSound = 0;
	}
}

BOOL CDirectSound::Create(LPCTSTR pszResource, CWnd * pWnd)
{
	//////////////////////////////////////////////////////////////////
	// load resource
	HINSTANCE hApp = ::GetModuleHandle(0);
	ASSERT(hApp);

	HRSRC hResInfo = ::FindResource(hApp, pszResource, TEXT("WAVE"));
	if(hResInfo == 0)
		return FALSE;

	HGLOBAL hRes = ::LoadResource(hApp, hResInfo);
	if(hRes == 0)
		return FALSE;

	LPVOID pTheSound = ::LockResource(hRes);
	if(pTheSound == 0)
		return FALSE;

	return Create(pTheSound, pWnd);
}


BOOL CDirectSound :: Create(LPVOID pSoundData, CWnd * pWnd) {
	if(pWnd == 0)
		pWnd = AfxGetApp()->GetMainWnd();

	ASSERT(pWnd != 0);
	ASSERT(::IsWindow(pWnd->GetSafeHwnd()));

	ASSERT(pSoundData != 0);

	//////////////////////////////////////////////////////////////////
	// create direct sound object
	
	if( m_lpDirectSound == 0 ) {
		// Someone might use sounds for starting apps. This may cause
		// DirectSoundCreate() to fail because the driver is used by
		// anyone else. So wait a little before starting with the work ...
		HRESULT hRes = DS_OK;
		short nRes = 0;

		do {
			if( nRes )
				::Sleep(500);
			hRes = ::DirectSoundCreate(0, &m_lpDirectSound, 0);
			++nRes;
		} while( nRes < 10 && (hRes == DSERR_ALLOCATED || hRes == DSERR_NODRIVER) );

		if( hRes != DS_OK )
			return FALSE;
	
		m_lpDirectSound->SetCooperativeLevel(pWnd->GetSafeHwnd(), DSSCL_NORMAL);
	}

	ASSERT(m_lpDirectSound != 0);

	WAVEFORMATEX * pcmwf;
	if( ! GetWaveData(pSoundData, pcmwf, m_pTheSound, m_dwTheSound) ||
		! CreateSoundBuffer(pcmwf) ||
		! SetSoundData(m_pTheSound, m_dwTheSound) )
		return FALSE;

	return TRUE;
}


BOOL CDirectSound :: GetWaveData(void * pRes, WAVEFORMATEX * & pWaveHeader, void * & pbWaveData, DWORD & cbWaveSize) {
	pWaveHeader = 0;
	pbWaveData = 0;
	cbWaveSize = 0;

	DWORD * pdw = (DWORD *)pRes;
	DWORD dwRiff = *pdw++;
	DWORD dwLength = *pdw++;
	DWORD dwType = *pdw++;

	if( dwRiff != mmioFOURCC('R', 'I', 'F', 'F') )
		return FALSE;      // not even RIFF

	if( dwType != mmioFOURCC('W', 'A', 'V', 'E') )
		return FALSE;      // not a WAV

	DWORD * pdwEnd = (DWORD *)((BYTE *)pdw + dwLength-4);

	while( pdw < pdwEnd ) {
		dwType = *pdw++;
		dwLength = *pdw++;

		switch( dwType ) {
			case mmioFOURCC('f', 'm', 't', ' '):
				if( !pWaveHeader ) {
					if( dwLength < sizeof(WAVEFORMAT) )
						return FALSE;      // not a WAV

					pWaveHeader = (WAVEFORMATEX *)pdw;

					if( pbWaveData && cbWaveSize )
						return TRUE;
				}
				break;

			case mmioFOURCC('d', 'a', 't', 'a'):
				pbWaveData = LPVOID(pdw);
				cbWaveSize = dwLength;

				if( pWaveHeader )
					return TRUE;
				break;
		}
		pdw = (DWORD *)((BYTE *)pdw + ((dwLength+1)&~1));
	}

	return FALSE;
}


BOOL CDirectSound::CreateSoundBuffer(WAVEFORMATEX * pcmwf)
{
	DSBUFFERDESC dsbdesc;

	// Set up DSBUFFERDESC structure.
	memset(&dsbdesc, 0, sizeof(DSBUFFERDESC)); // Zero it out.
	dsbdesc.dwSize = sizeof(DSBUFFERDESC);
	// Need no controls (pan, volume, frequency).
	dsbdesc.dwFlags = DSBCAPS_STATIC;		// assumes that the sound is played often
	dsbdesc.dwBufferBytes = m_dwTheSound;
	dsbdesc.lpwfxFormat = pcmwf;    // Create buffer.
	HRESULT hRes;
	if( DS_OK != (hRes = m_lpDirectSound->CreateSoundBuffer(&dsbdesc, &m_pDsb, 0)) ) {
		// Failed.
		DSError(hRes);
		m_pDsb = 0;
		return FALSE;
	}

	return TRUE;
}


BOOL CDirectSound::SetSoundData(void * pSoundData, DWORD dwSoundSize) {
	LPVOID lpvPtr1;
	DWORD dwBytes1;
	// Obtain write pointer.
	HRESULT hr = m_pDsb->Lock(0, 0, &lpvPtr1, &dwBytes1, 0, 0, DSBLOCK_ENTIREBUFFER);    
    // If DSERR_BUFFERLOST is returned, restore and retry lock.
	if(DSERR_BUFFERLOST == hr) {
		m_pDsb->Restore();
		hr = m_pDsb->Lock(0, 0, &lpvPtr1, &dwBytes1, 0, 0, DSBLOCK_ENTIREBUFFER);
	}
	if(DS_OK == hr) {
		// Write to pointers.
		::CopyMemory(lpvPtr1, pSoundData, dwBytes1);
		// Release the data back to DirectSound.
		hr = m_pDsb->Unlock(lpvPtr1, dwBytes1, 0, 0);
		if(DS_OK == hr)
            return TRUE;
	}
	// Lock, Unlock, or Restore failed.
	return FALSE;
}

void CDirectSound::Play(DWORD dwStartPosition, BOOL bLoop)
{
	if( ! IsValid() || ! IsEnabled() )
		return;		// no chance to play the sound ...

	if( dwStartPosition > m_dwTheSound )
		dwStartPosition = m_dwTheSound;
	m_pDsb->SetCurrentPosition(dwStartPosition);
	if( DSERR_BUFFERLOST == m_pDsb->Play(0, 0, bLoop ? DSBPLAY_LOOPING : 0) ) {
		// another application had stolen our buffer
		// Note that a "Restore()" is not enough, because
		// the sound data is invalid after Restore().
		SetSoundData(m_pTheSound, m_dwTheSound);

		// Try playing again
		m_pDsb->Play(0, 0, bLoop ? DSBPLAY_LOOPING : 0);
	}
}

void CDirectSound::Stop()
{
	if( IsValid() )
		m_pDsb->Stop();
}

void CDirectSound::Pause()
{
	Stop();
}

void CDirectSound::Continue()
{
	if( IsValid() ) {
		DWORD dwPlayCursor, dwWriteCursor;
		m_pDsb->GetCurrentPosition(&dwPlayCursor, &dwWriteCursor);
		Play(dwPlayCursor);
	}
}

BOOL CDirectSound::IsValid() const
{
	return (m_lpDirectSound && m_pDsb && m_pTheSound && m_dwTheSound) ? TRUE : FALSE;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91色乱码一区二区三区| 欧美酷刑日本凌虐凌虐| 性做久久久久久免费观看欧美| 精品国产成人系列| 欧美日韩一区二区三区不卡 | 久久99国产精品麻豆| 亚洲欧美日韩人成在线播放| xnxx国产精品| 欧美一三区三区四区免费在线看 | 91成人看片片| 成人高清免费在线播放| 麻豆精品精品国产自在97香蕉 | 国产精品91xxx| 视频一区二区中文字幕| 亚洲女人小视频在线观看| 久久久一区二区三区捆绑**| 欧美一区二区三区精品| 欧美性受极品xxxx喷水| 91丝袜美女网| 成人黄色片在线观看| 国产成人99久久亚洲综合精品| 久久精品av麻豆的观看方式| 亚欧色一区w666天堂| 一二三区精品福利视频| 亚洲欧美日韩在线播放| 亚洲视频一二三区| 国产精品成人免费精品自在线观看| 久久久精品人体av艺术| 2021国产精品久久精品| 精品少妇一区二区三区在线视频| 欧美一区二区私人影院日本| 欧美剧在线免费观看网站| 欧美视频三区在线播放| 欧美性猛片xxxx免费看久爱| 欧美系列亚洲系列| 欧美日韩极品在线观看一区| 欧美性淫爽ww久久久久无| 日本精品一区二区三区高清 | 1024成人网| 亚洲色图一区二区| 亚洲精品美国一| 亚洲国产精品久久人人爱| 亚洲18女电影在线观看| 日韩av高清在线观看| 精品一区二区三区视频| 国产毛片精品一区| 丰满岳乱妇一区二区三区| 成人福利视频网站| 在线视频一区二区三区| 91精品在线免费| 精品剧情在线观看| 中文字幕av资源一区| 中文字幕一区不卡| 亚洲va韩国va欧美va| 精品一区二区三区av| 国产激情一区二区三区| 91在线看国产| 欧美日韩午夜在线视频| 精品少妇一区二区三区日产乱码| 久久精品人人爽人人爽| 亚洲精品一二三| 日本欧美久久久久免费播放网| 久久电影国产免费久久电影| 成人性视频免费网站| 色偷偷88欧美精品久久久| 欧美老人xxxx18| 久久久五月婷婷| 亚洲激情中文1区| 日韩国产高清在线| 国产乱淫av一区二区三区| 99视频一区二区| 欧美欧美午夜aⅴ在线观看| 亚洲精品一区二区在线观看| 亚洲欧洲av一区二区三区久久| 日欧美一区二区| 国产成人99久久亚洲综合精品| 精品视频123区在线观看| 欧美成人aa大片| 亚洲欧美日韩系列| 精品亚洲欧美一区| 在线视频一区二区三区| 久久久久久久久久久久久久久99 | 日韩一区二区免费视频| 国产精品色在线| 日韩成人免费看| 99re这里都是精品| 日韩一区国产二区欧美三区| 国产精品久久夜| 麻豆成人久久精品二区三区小说| 99re66热这里只有精品3直播| 日韩欧美中文字幕一区| 亚洲男同性视频| 激情成人午夜视频| 欧美人xxxx| 亚洲精品乱码久久久久久久久| 韩国女主播一区| 91精品麻豆日日躁夜夜躁| 亚洲女人小视频在线观看| 国内欧美视频一区二区| 欧美精品乱码久久久久久| 椎名由奈av一区二区三区| 国产一区二区三区视频在线播放| 69av一区二区三区| 亚洲精品乱码久久久久久黑人| 国产91精品精华液一区二区三区| 日韩欧美高清一区| 天天操天天综合网| 在线看一区二区| 中文字幕在线观看不卡| 国产盗摄视频一区二区三区| 日韩你懂的在线播放| 亚洲第一综合色| 欧美性猛交一区二区三区精品| 亚洲人成小说网站色在线| 国产高清不卡一区二区| 精品三级在线观看| 久久国产综合精品| 欧美一二三区精品| 美女网站在线免费欧美精品| 6080yy午夜一二三区久久| 亚洲在线视频一区| 色激情天天射综合网| 亚洲欧洲另类国产综合| 国产成a人亚洲| 国产人久久人人人人爽| 国产精品小仙女| 国产日产精品一区| 成人综合婷婷国产精品久久 | 亚洲黄色在线视频| 一本色道综合亚洲| 亚洲女人****多毛耸耸8| 91看片淫黄大片一级| 亚洲免费av高清| 欧美羞羞免费网站| 五月天中文字幕一区二区| 欧美色男人天堂| 日本中文在线一区| 日韩精品中文字幕一区| 久久er精品视频| 国产色婷婷亚洲99精品小说| 成人免费视频app| 国产精品高潮呻吟久久| 91在线丨porny丨国产| 一区二区三区免费网站| 欧美日韩黄色影视| 麻豆国产91在线播放| 久久亚洲春色中文字幕久久久| 国产高清精品在线| 亚洲免费看黄网站| 欧美日韩成人在线| 国产资源精品在线观看| 欧美韩国一区二区| 色偷偷久久人人79超碰人人澡| 亚洲成人免费电影| 欧美不卡在线视频| 成人av在线一区二区三区| 亚洲影视在线播放| 日韩午夜激情av| 成人综合在线观看| 亚洲午夜av在线| 精品入口麻豆88视频| 99re这里只有精品视频首页| 午夜日韩在线电影| 久久久久久久久免费| 91久久精品一区二区| 秋霞av亚洲一区二区三| 中文欧美字幕免费| 欧美最猛黑人xxxxx猛交| 久久国产精品72免费观看| 中文字幕亚洲区| 在线不卡欧美精品一区二区三区| 国产一区二区三区免费在线观看| 亚洲精品中文在线影院| 精品欧美久久久| 色综合天天综合网天天狠天天| 美女mm1313爽爽久久久蜜臀| 中文字幕在线一区二区三区| 欧美男人的天堂一二区| 国产成人久久精品77777最新版本| 伊人婷婷欧美激情| 久久九九久久九九| 69堂成人精品免费视频| 99久久精品免费看国产免费软件| 日一区二区三区| 亚洲欧美日韩在线播放| 久久嫩草精品久久久精品| 欧美日韩国产影片| 成人免费看黄yyy456| 蜜桃av一区二区在线观看| 亚洲精品少妇30p| 久久久久久一二三区| 欧美高清视频在线高清观看mv色露露十八| 国产成人av电影免费在线观看| 视频在线观看一区二区三区| 亚洲天堂成人在线观看| 国产三级欧美三级| 3751色影院一区二区三区| 91蝌蚪国产九色| 成人永久看片免费视频天堂| 久久精品国产99国产|