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

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

?? midi.cpp

?? VC++編程寶典,電子工業出版社出版,源代碼,第一部分
?? 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一区二区三区免费野_久草精品视频
日本aⅴ亚洲精品中文乱码| 一区二区三区四区高清精品免费观看| 日韩激情视频在线观看| 日本电影亚洲天堂一区| 一区二区三区四区蜜桃| 色老汉av一区二区三区| 亚洲一二三区在线观看| 日韩一区二区免费在线电影| 老司机精品视频一区二区三区| 精品国产免费一区二区三区香蕉| 久久99精品国产麻豆婷婷| 精品国产乱码久久久久久蜜臀| 国产精品一二三在| 一色屋精品亚洲香蕉网站| 91在线小视频| 午夜精品久久久| 欧美一区二区性放荡片| 国产成人av电影在线观看| 久久久久国产精品麻豆| 99在线精品免费| 亚洲成a人片在线观看中文| 8v天堂国产在线一区二区| 国产乱淫av一区二区三区| 亚洲欧美一区二区视频| 欧美亚洲一区二区在线| 蜜桃视频免费观看一区| 国产女人aaa级久久久级| 色www精品视频在线观看| 麻豆精品一区二区| 国产精品三级视频| 欧美日韩综合色| 激情文学综合插| 伊人性伊人情综合网| 精品蜜桃在线看| 色婷婷综合久久久久中文一区二区 | 亚洲欧美一区二区三区国产精品| 欧美日韩中文一区| 六月丁香婷婷久久| 国产精品乱码一区二区三区软件| 欧美调教femdomvk| 国产精品亚洲综合一区在线观看| 亚洲制服丝袜在线| 国产免费成人在线视频| 欧美肥大bbwbbw高潮| 成人一级视频在线观看| 日韩黄色免费网站| 中文字幕制服丝袜成人av| 5月丁香婷婷综合| 99国产精品久久久| 奇米综合一区二区三区精品视频| 亚洲欧美影音先锋| 久久久一区二区三区捆绑**| 欧美片在线播放| 99精品欧美一区二区三区小说| 老司机一区二区| 亚洲成人免费电影| 亚洲欧美日韩一区二区三区在线观看| 精品精品欲导航| 欧美日韩日日骚| 99久久精品国产观看| 国产激情视频一区二区三区欧美| 奇米在线7777在线精品 | 亚洲精品欧美专区| 国产亚洲婷婷免费| 欧美不卡一区二区| 欧美一区二区三区色| 91国产免费看| a4yy欧美一区二区三区| 国产精品99久久久久久有的能看 | 1024亚洲合集| 国产精品美女久久久久久| 久久久久久久久久久99999| 欧美一卡2卡三卡4卡5免费| 欧美日韩国产首页| 日韩写真欧美这视频| 欧美私模裸体表演在线观看| www.日韩在线| 99这里只有精品| 成熟亚洲日本毛茸茸凸凹| 国产精品自拍av| 国产电影一区二区三区| 国内外成人在线| 免费成人美女在线观看| 天堂av在线一区| 日韩高清在线观看| 美腿丝袜亚洲三区| 久久激情五月婷婷| 国产一区在线看| 国产91精品免费| 成人黄色综合网站| 97精品视频在线观看自产线路二| 色综合天天视频在线观看| 色综合天天狠狠| 欧美日韩国产成人在线91| 欧美日韩午夜精品| 欧美大片在线观看一区二区| 久久综合久久鬼色中文字| 久久亚洲精品国产精品紫薇| 国产精品丝袜91| 亚洲欧美偷拍三级| 亚洲成人手机在线| 日本vs亚洲vs韩国一区三区 | 一区二区三区视频在线观看| 亚洲国产aⅴ成人精品无吗| 一区二区三区四区不卡视频| 肉色丝袜一区二区| 精品系列免费在线观看| 国产精品羞羞答答xxdd| 99精品久久只有精品| 欧美午夜精品一区二区三区| 91精品在线麻豆| 久久蜜臀中文字幕| 亚洲日本在线a| 天天综合日日夜夜精品| 国模大尺度一区二区三区| 成人av免费在线观看| 欧美午夜电影网| 欧美电视剧免费观看| 日韩码欧中文字| 青青草精品视频| 成人午夜免费电影| 欧美日韩三级一区| 欧美国产日韩亚洲一区| 曰韩精品一区二区| 久久精品免费观看| 91在线观看高清| 欧美一二三在线| 亚洲丝袜精品丝袜在线| 免费观看成人av| 91网页版在线| 日韩欧美国产成人一区二区| 国产精品福利电影一区二区三区四区| 丝袜亚洲另类欧美| 92精品国产成人观看免费| 欧美电影免费观看高清完整版在 | 久久影院电视剧免费观看| 亚洲天堂久久久久久久| 精品亚洲aⅴ乱码一区二区三区| 色综合天天视频在线观看| 欧美精品一区二区三区在线| 一二三四区精品视频| 国产xxx精品视频大全| 欧美片在线播放| 亚洲激情av在线| 成人免费视频免费观看| 日韩欧美国产三级电影视频| 亚洲美女在线国产| 成人黄色软件下载| www国产亚洲精品久久麻豆| 亚洲电影一区二区| 91麻豆精品在线观看| 久久久久亚洲蜜桃| 日韩精品一二三区| 欧美偷拍一区二区| 日韩久久一区二区| 99这里只有精品| 国产精品乱码妇女bbbb| 精品一区二区影视| 3d动漫精品啪啪一区二区竹菊 | 日韩欧美卡一卡二| 亚洲午夜激情av| 色综合视频在线观看| 国产精品久久久久久久第一福利| 国产一区不卡精品| 日韩欧美成人一区| 美腿丝袜在线亚洲一区| 欧美一区三区四区| 日日夜夜免费精品| 67194成人在线观看| 亚洲国产aⅴ天堂久久| 欧美亚洲丝袜传媒另类| 亚洲精品成人a在线观看| 色就色 综合激情| 一区二区三区欧美| 欧美羞羞免费网站| 亚洲午夜精品网| 欧美精品亚洲一区二区在线播放| 亚洲综合小说图片| 欧美特级限制片免费在线观看| 亚洲自拍偷拍九九九| 欧美色图激情小说| 无吗不卡中文字幕| 日韩一区二区三区在线| 美女mm1313爽爽久久久蜜臀| 精品国产在天天线2019| 国产精品一卡二| 国产精品久久久久婷婷| 91麻豆视频网站| 亚洲永久精品大片| 欧美日韩你懂得| 久久国产精品色| 国产亚洲欧美中文| 91在线观看污| 亚洲国产日韩在线一区模特| 欧美午夜精品一区二区蜜桃| 日韩成人伦理电影在线观看| 久久蜜桃一区二区| 不卡视频在线观看| 亚洲一区二区三区美女| 欧美一级艳片视频免费观看|