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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? midi.cpp

?? 這是一個俄羅斯方塊的游戲
?? CPP
字號:
// Midi.cpp

#include "stdafx.h"
#include "Midi.h"

CMidi::CMidi()
{

	m_nDevices = midiOutGetNumDevs();
	m_bOpened = m_bPaused = m_bPlaying = FALSE;
	m_wDeviceID = 0;

}

CMidi::~CMidi()
{

	Close();

}

int CMidi::DeviceCount( void )
{

	return( m_nDevices );

}

BOOL CMidi::Open( const char *lpszFilename )
{

	if( !m_bOpened ){

		// Initialize member variables.
		m_bPaused = m_bPlaying = FALSE;
		m_wDeviceID = 0;

		// See if the file exists.
		CFileStatus Status;
		if( !CFile::GetStatus( lpszFilename, Status ) )
			return( FALSE );

		// Open the device.
		MCI_OPEN_PARMS OpenParms;
		OpenParms.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_SEQUENCER;
		OpenParms.lpstrElementName = (LPCSTR) lpszFilename;
		OpenParms.wDeviceID = 0;
		if( mciSendCommand( NULL, MCI_OPEN, MCI_WAIT | MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT, (DWORD)(LPVOID) &OpenParms ) )
			return( FALSE );
		m_wDeviceID = OpenParms.wDeviceID;
		m_bOpened = TRUE;

		// Set the time format to milliseconds.
		MCI_SET_PARMS SetParms;
		SetParms.dwTimeFormat = MCI_FORMAT_MILLISECONDS;
		if( mciSendCommand( m_wDeviceID, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &SetParms ) ){
			Close();
			return( FALSE );
			}
		mciSendCommand( m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL );
		return( TRUE );
		}

	return( FALSE );

}

BOOL CMidi::Close( void )
{

	if( m_bOpened ){

		// Stop the playing and close the device.
		if( m_bPlaying || m_bPaused )
			mciSendCommand( m_wDeviceID, MCI_STOP, NULL, NULL );
		mciSendCommand( m_wDeviceID, MCI_CLOSE, NULL, NULL );

		// Clear member variables.
		m_bOpened = m_bPaused = m_bPlaying = FALSE;
		m_wDeviceID = 0;

		return( TRUE );
		}

	return( FALSE );

}

BOOL CMidi::Play( void )
{

	if( m_bOpened ){

		// Issue the 'play' command.
		MCI_PLAY_PARMS PlayParms;
		PlayParms.dwCallback = NULL;
		PlayParms.dwFrom = ( ( GetMinutes() * 60 ) + GetSeconds () ) * 1000;
		if( mciSendCommand( m_wDeviceID, MCI_PLAY, MCI_FROM, (DWORD)(LPVOID) &PlayParms ) )
			return( FALSE );

		// Set our class members so we know that
		// we're currently playing.
		m_bPlaying = TRUE;
		m_bPaused = FALSE;

		return( TRUE );
		}

	return( FALSE );

}

BOOL CMidi::Stop( void )
{

	if( m_bOpened && m_bPlaying ){
		// Issue the 'stop' command.
		mciSendCommand( m_wDeviceID, MCI_STOP, NULL, NULL );
		// Issue the command that seeks back to the start.
		mciSendCommand( m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL );
		m_bPaused = m_bPlaying = FALSE;

		return( TRUE );
		}

	return( FALSE );

}

BOOL CMidi::Pause( void )
{

	if( m_bOpened && m_bPlaying ){

		// Pause the CD.
		MCI_PLAY_PARMS PlayParms;
		if( mciSendCommand( m_wDeviceID, MCI_PAUSE, 0, (DWORD)(LPVOID) &PlayParms ) )
			return( FALSE );

		m_bPaused = TRUE;

		return( TRUE );
		}

	return( FALSE );

}

BOOL CMidi::IsPlaying( void )
{

	if( m_bOpened ){

		// Issue the 'status' command.
		MCI_STATUS_PARMS StatusParms;
		StatusParms.dwItem = MCI_STATUS_MODE;
		if( mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms ) )
			return( FALSE );

		if( StatusParms.dwReturn == MCI_MODE_PLAY ){
			m_bPlaying = TRUE;
			m_bPaused = FALSE;
			return( TRUE );
			}
		else if( StatusParms.dwReturn == MCI_MODE_PAUSE ){
			m_bPlaying = TRUE;
			m_bPaused = FALSE;
			return( TRUE );
			}
		else{
			m_bPlaying = FALSE;
			m_bPaused = FALSE;
			return( FALSE );
			}
		}

	return( FALSE );

}

BOOL CMidi::GetLength( int *lpnMinutes, int *lpnSeconds )
{

	// Set minutes and seconds to -1 in
	// case there's an error.
	*lpnMinutes = -1;
	*lpnSeconds = -1;

	if( m_bOpened ){

		// Issue the 'status/length' command.
		MCI_STATUS_PARMS StatusParms;
		StatusParms.dwItem = MCI_STATUS_LENGTH;
		if( mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms ) )
			return( FALSE );

		// Store the values in *lpnMinutes and *lpnSeconds.
		*lpnMinutes = ( StatusParms.dwReturn / 1000 ) / 60;
		*lpnSeconds = ( StatusParms.dwReturn / 1000 ) % 60;

		return( TRUE );

		}

	return( FALSE );

}

int CMidi::GetMinutes( void )
{

	if( m_bOpened ){

		// Get the current position.
		MCI_STATUS_PARMS StatusParms;
		StatusParms.dwItem = MCI_STATUS_POSITION;
		if( mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms ) )
			return( -1 );

		return( (int) ( ( StatusParms.dwReturn / 1000 ) / 60 ) );
		}

	return( -1 );

}

int CMidi::GetSeconds( void )
{

	if( m_bOpened ){

		// Get the current position.
		MCI_STATUS_PARMS StatusParms;
		StatusParms.dwItem = MCI_STATUS_POSITION;
		if( mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms ) )
			return( -1 );

		return( (int) ( ( StatusParms.dwReturn / 1000 ) % 60 ) );
		}

	return( -1 );

}

BOOL CMidi::SeekTo( int nMinute, int nSecond )
{

	if( m_bOpened ){

		// Set dwTo to the correct value.
		MCI_SEEK_PARMS SeekParms;
		SeekParms.dwTo = ( nMinute * 60 + nSecond ) * 1000;

		// Pause if we're not paused.
		if( m_bPlaying && !m_bPaused )
			mciSendCommand( m_wDeviceID, MCI_PAUSE, 0, NULL );

		// Issue the 'seek' command.
		if( mciSendCommand( m_wDeviceID, MCI_SEEK, MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &SeekParms ) )
			return( FALSE );

		// Restart the audio.
		if( m_bPlaying && !m_bPaused )
			return( Play() );

		}

	return( FALSE );

}

BOOL CMidi::SkipForward( int nSeconds )
{

	if( m_bOpened ){

		// Get the current position.
		MCI_STATUS_PARMS StatusParms;
		DWORD dwPos;
		StatusParms.dwItem = MCI_STATUS_POSITION;
		mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms );
		dwPos = StatusParms.dwReturn;

		// Skip forward n milliseconds
		dwPos += (DWORD) nSeconds * 1000;

		// Pause and seek to.
		MCI_SEEK_PARMS SeekParms;
		SeekParms.dwTo = dwPos;
		if( m_bPlaying && !m_bPaused )
			mciSendCommand( m_wDeviceID, MCI_PAUSE, 0, NULL );
		mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &SeekParms);

		// Restart the audio.
		if( m_bPlaying && !m_bPaused )
			return( Play() );

		}

	return( FALSE );

}

BOOL CMidi::SkipBack( int nSeconds )
{

	if( m_bOpened ){

		// Get the current position.
		MCI_STATUS_PARMS StatusParms;
		DWORD dwPos;
		StatusParms.dwItem = MCI_STATUS_POSITION;
		mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms );
		dwPos = StatusParms.dwReturn;

		// Skip forward n milliseconds.
		dwPos -= (DWORD) nSeconds * 1000;

		// Pause and seek to.
		MCI_SEEK_PARMS SeekParms;
		SeekParms.dwTo = dwPos;
		if( m_bPlaying && !m_bPaused )
			mciSendCommand( m_wDeviceID, MCI_PAUSE, 0, NULL );
		mciSendCommand( m_wDeviceID, MCI_SEEK, MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &SeekParms );

		// Restart the audio.
		if( m_bPlaying && !m_bPaused )
			return( Play() );

		}

	return( FALSE );

}

int CMidi::GetTempo( void )
{

	if( m_bOpened ){

		// Issue the 'status/tempo' command.
		MCI_STATUS_PARMS StatusParms;
		StatusParms.dwItem = MCI_SEQ_STATUS_TEMPO;
		if( mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms ) )
			return( -1 );

		return( (int) StatusParms.dwReturn );
		}

	return( -1 );

}

BOOL CMidi::SetTempo( int nTempo )
{

	if( m_bOpened ){

		// Set the tempo.
		MCI_SEQ_SET_PARMS SeqSetParms;
		SeqSetParms.dwTempo = nTempo;
		mciSendCommand( m_wDeviceID, MCI_SET, MCI_WAIT | MCI_SEQ_SET_TEMPO, (DWORD)(LPVOID) &SeqSetParms );
		return( TRUE );
		}

	return( FALSE );

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲私人黄色宅男| 91精品久久久久久久久99蜜臂| 99综合电影在线视频| 欧美精品久久一区| 国产精品激情偷乱一区二区∴| 日韩国产精品久久| 欧美日韩一区二区三区视频| 久久免费的精品国产v∧| 亚洲午夜一区二区| 国产成人亚洲精品青草天美| 欧美日韩高清在线播放| 亚洲天堂网中文字| 国产精品99久久久久久似苏梦涵| 欧美日韩精品电影| 亚洲一区二区美女| 一本色道亚洲精品aⅴ| 久久久久久久久岛国免费| 日韩av不卡一区二区| 99这里都是精品| 国产精品麻豆99久久久久久| 精彩视频一区二区三区| 日韩一区二区三区在线| 亚洲国产cao| 欧美视频完全免费看| 亚洲精选视频免费看| 99久久99久久精品免费看蜜桃| 国产日韩欧美不卡| 寂寞少妇一区二区三区| 欧美疯狂做受xxxx富婆| 亚洲美女在线国产| 成人激情综合网站| www成人在线观看| 日韩精品每日更新| 99精品热视频| 亚洲女与黑人做爰| 成人一道本在线| 欧美变态凌虐bdsm| 日韩精品一卡二卡三卡四卡无卡 | 成人一区在线看| 日韩视频在线你懂得| 日韩激情中文字幕| 欧美日韩精品一区视频| 亚洲精品国久久99热| 不卡一卡二卡三乱码免费网站| 欧美成人a视频| 美女精品自拍一二三四| 在线播放国产精品二区一二区四区 | 欧美午夜精品久久久久久孕妇 | 国产精品高潮呻吟| 国产九色精品成人porny| 久久亚洲精精品中文字幕早川悠里| 免费成人在线视频观看| 制服丝袜激情欧洲亚洲| 全国精品久久少妇| 91精品国产乱码久久蜜臀| 视频一区在线视频| 4hu四虎永久在线影院成人| 婷婷开心久久网| 欧美一区二区在线观看| 久久精品国产第一区二区三区| 日韩一级欧美一级| 九九**精品视频免费播放| 久久精品亚洲乱码伦伦中文| 成人美女在线视频| 亚洲日本在线视频观看| 色又黄又爽网站www久久| 一区二区三区在线免费| 欧美精品 日韩| 久久99久久精品| 国产欧美一区二区精品婷婷| 91亚洲精品乱码久久久久久蜜桃| 亚洲视频在线一区| 欧美日韩综合色| 日本不卡视频一二三区| 国产亚洲欧美一区在线观看| 成人av中文字幕| 亚洲妇女屁股眼交7| 91精品国产日韩91久久久久久| 精油按摩中文字幕久久| 最新国产成人在线观看| 欧美日韩一级二级| 国产在线不卡视频| 亚洲已满18点击进入久久| 日韩午夜激情免费电影| 不卡一区二区三区四区| 午夜精品免费在线观看| 国产亚洲精品bt天堂精选| 成人黄色综合网站| 蜜桃在线一区二区三区| 国产精品久久久久久久久快鸭| 欧美日韩一区三区四区| 国产成人综合自拍| 午夜精品福利在线| 国产精品国产三级国产三级人妇| 欧美色网站导航| 国产成人午夜精品影院观看视频 | 老汉av免费一区二区三区| 国产精品久久综合| 91精品国产全国免费观看 | 青娱乐精品视频| 中文字幕在线观看不卡| 91精品国产综合久久香蕉的特点 | 久久99国内精品| 亚洲一区二区av电影| 国产日产欧美一区二区视频| 欧美日韩一二三区| 色婷婷av一区| 成人午夜私人影院| 国产福利一区二区三区视频 | 欧美日韩久久久久久| 岛国精品一区二区| 奇米影视一区二区三区| 一区二区在线看| 国产精品理伦片| 久久九九影视网| 欧美mv日韩mv国产网站app| 欧美在线视频日韩| 91久久久免费一区二区| 成人国产免费视频| 国产一区美女在线| 成人中文字幕电影| 国产一区中文字幕| 极品少妇xxxx精品少妇| 美女诱惑一区二区| 视频在线观看一区二区三区| 亚洲综合久久久久| 一区二区久久久| 亚洲精品国产视频| 亚洲精品视频一区二区| 中文无字幕一区二区三区 | 精彩视频一区二区三区| 麻豆视频一区二区| 国产精选一区二区三区| 久久爱www久久做| 久久国产视频网| 国产在线视视频有精品| 国产精品一区二区黑丝| 国产白丝精品91爽爽久久| 成人性色生活片免费看爆迷你毛片| 国产福利视频一区二区三区| 国产乱国产乱300精品| 国产91露脸合集magnet | 久久久久亚洲综合| 欧美极品xxx| 中文字幕一区二区在线播放| 国产精品久线观看视频| 一卡二卡欧美日韩| 亚洲3atv精品一区二区三区| 免费人成精品欧美精品| 久久国产人妖系列| 99久久精品国产毛片| 欧美色偷偷大香| 精品国免费一区二区三区| 久久久不卡影院| 亚洲视频免费观看| 午夜精品影院在线观看| 黄色精品一二区| 91免费小视频| 欧美一区二区在线播放| 欧美成人国产一区二区| 亚洲女人的天堂| 另类小说色综合网站| 成人美女视频在线观看18| 色噜噜狠狠成人网p站| 欧美一区二区三区喷汁尤物| 国产亚洲美州欧州综合国| 亚洲综合激情网| 九九国产精品视频| 色综合色狠狠综合色| 欧美专区日韩专区| 久久久www成人免费毛片麻豆 | 欧美电影免费观看高清完整版| 久久精品一区二区三区av| 亚洲视频一区二区在线观看| 日韩二区三区四区| 成年人网站91| 91精品国产免费| 中文字幕一区二区三区四区不卡 | 亚洲国产欧美在线| 日韩有码一区二区三区| 日本精品免费观看高清观看| 欧美zozozo| 一区二区三区精品久久久| 极品少妇xxxx精品少妇| 欧美私人免费视频| 国产精品久久久久婷婷| 麻豆精品在线视频| 欧美午夜在线一二页| 亚洲欧洲三级电影| 国产寡妇亲子伦一区二区| 日韩精品一区二区三区老鸭窝| 亚洲欧美精品午睡沙发| 国产乱人伦偷精品视频免下载| 69堂成人精品免费视频| 一区二区三区欧美| 99re成人在线| 欧美国产综合一区二区| 国产综合久久久久久久久久久久| 欧美欧美欧美欧美| 有码一区二区三区|