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

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

?? cdaudio.cpp

?? 本文件中包含的是《VC編程100例》一書中的源代碼
?? CPP
字號:
// CDAudio.cpp

#include "stdafx.h"
#include <mmsystem.h>
#include "CDAudio.h"

CCDAudio::CCDAudio()
{

	m_bOpened = m_bPaused = m_bPlaying = FALSE;
	m_wDeviceID = 0;

}

CCDAudio::~CCDAudio()
{

	Close();

}

//打開設備
BOOL CCDAudio::Open( void )
{

	if( m_bOpened )
		return( TRUE );

	m_bPaused = m_bPlaying = FALSE;
	m_wDeviceID = 0;

	//發送打開設備命令
	MCI_OPEN_PARMS OpenParms;
	OpenParms.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO;
	OpenParms.wDeviceID = 0;

	if( mciSendCommand( NULL, MCI_OPEN, MCI_WAIT | MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_SHAREABLE, (DWORD)(LPVOID) &OpenParms ) )
		return( FALSE );

	m_wDeviceID = OpenParms.wDeviceID;
	m_bOpened = TRUE;

	MCI_SET_PARMS SetParms;
	SetParms.dwTimeFormat = MCI_FORMAT_TMSF;

	if( mciSendCommand( m_wDeviceID, MCI_SET, MCI_WAIT | MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &SetParms ) ){
		Close ();
		return( FALSE );
		}

	mciSendCommand( m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL );

	return( TRUE );

}
//關閉設備
void CCDAudio::Close( void )
{

	if( !m_bOpened )
		return;

	if( m_bPlaying || m_bPaused )
		mciSendCommand( m_wDeviceID, MCI_STOP, NULL, NULL );

	mciSendCommand( m_wDeviceID, MCI_CLOSE, MCI_WAIT, NULL );

	m_bOpened = m_bPaused = m_bPlaying = FALSE;
	m_wDeviceID = 0;

}
//播放
BOOL CCDAudio::Play (void)
{

	if( !Open() )
		return( FALSE );

	if( !IsAudioTrack( GetCurrentTrack() ) )
		return( FALSE );

	MCI_PLAY_PARMS PlayParms;
	PlayParms.dwCallback = NULL;
	PlayParms.dwFrom = MCI_MAKE_TMSF( GetCurrentTrack(), GetMinutes(), GetSeconds(), GetFrames() );

	if( mciSendCommand( m_wDeviceID, MCI_PLAY, MCI_FROM, (DWORD)(LPVOID) &PlayParms ) )
		return( FALSE );

	m_bPaused = FALSE;
	m_bPlaying = TRUE;

	return( TRUE );

}
//停止
void CCDAudio::Stop( void )
{

	if( !m_bOpened || !m_bPlaying )
		return;

	mciSendCommand( m_wDeviceID, MCI_STOP, MCI_WAIT, NULL );
	mciSendCommand( m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL );
	m_bPlaying = FALSE;
	m_bPaused = FALSE;

}
//暫停
void CCDAudio::Pause( void )
{

	if( !m_bOpened || !m_bPlaying )
		return;

	MCI_PLAY_PARMS PlayParms;

	if( mciSendCommand( m_wDeviceID, MCI_PAUSE, 0, (DWORD)(LPVOID) &PlayParms ) )
		return;

	m_bPaused = TRUE;

}
//獲得曲目數量
int CCDAudio::GetTotalTracks( void )
{

	if( !m_bOpened )
		return( -1 );

	MCI_STATUS_PARMS StatusParms;
	StatusParms.dwItem = MCI_STATUS_NUMBER_OF_TRACKS;

	if( mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms ) )
		return( -1 );

	return( (int) StatusParms.dwReturn );

}
//獲得所有曲目的總長度(時間)
void CCDAudio::GetTotalLength( int *pnMinutes, int *pnSeconds )
{

	*pnMinutes = -1;
	*pnSeconds = -1;

	if( !m_bOpened )
		return;

	MCI_STATUS_PARMS StatusParms;
	StatusParms.dwItem = MCI_STATUS_LENGTH;

	if( mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms ) )
		return;

	*pnMinutes = MCI_MSF_MINUTE( StatusParms.dwReturn );
	*pnSeconds = MCI_MSF_SECOND( StatusParms.dwReturn );

}
//獲得一個曲目的長度
void CCDAudio::GetTrackLength( int nTrack, int *pnMinutes, int *pnSeconds )
{

	*pnMinutes = -1;
	*pnSeconds = -1;

	if( !m_bOpened )
		return;

	MCI_STATUS_PARMS StatusParms;
	StatusParms.dwItem = MCI_STATUS_LENGTH;
	StatusParms.dwTrack = (DWORD) nTrack;

	if( mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM | MCI_TRACK, (DWORD)(LPVOID) &StatusParms ) )
			return;

	*pnMinutes = MCI_MSF_MINUTE( StatusParms.dwReturn );
	*pnSeconds = MCI_MSF_SECOND( StatusParms.dwReturn );

}
//獲得當前播放的曲目
int CCDAudio::GetCurrentTrack( void )
{

	if( !m_bOpened )
		return( -1 );

	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( MCI_TMSF_TRACK( StatusParms.dwReturn ) );

}
//獲得當前播放曲目前已經播放的分鐘數
int CCDAudio::GetMinutes( void )
{

	if( !m_bOpened )
		return( -1 );

	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( MCI_TMSF_MINUTE( StatusParms.dwReturn ) );

}
//獲得當前播放曲目前經播放的秒數
int CCDAudio::GetSeconds( void )
{

	if( !m_bOpened )
		return( -1 );

	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( MCI_TMSF_SECOND( StatusParms.dwReturn ) );

}
//獲得幀數
int CCDAudio::GetFrames( void )
{

	if( !m_bOpened )
		return( -1 );

	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( MCI_TMSF_FRAME( StatusParms.dwReturn ) );

}
//判斷光驅里的cd是否正常
BOOL CCDAudio::IsDriveReady( void )
{

	if( !m_bOpened )
		return( FALSE );

	MCI_STATUS_PARMS StatusParms;
	StatusParms.dwItem = MCI_STATUS_MODE;

	if( mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms ) )
		return( FALSE );

	if( StatusParms.dwReturn == MCI_MODE_NOT_READY || StatusParms.dwReturn == MCI_MODE_OPEN )
		return( FALSE );

	StatusParms.dwItem = MCI_STATUS_MEDIA_PRESENT;
	if( mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms ) )
		return( FALSE );

	return( (BOOL) StatusParms.dwReturn );

}
//判斷曲目是否是音樂
BOOL CCDAudio::IsAudioTrack( int nTrack )
{

	if( !m_bOpened )
		return( FALSE );

	MCI_STATUS_PARMS StatusParms;
	StatusParms.dwItem = MCI_CDA_STATUS_TYPE_TRACK;
	StatusParms.dwTrack = nTrack;

	if( mciSendCommand( m_wDeviceID, MCI_STATUS, MCI_STATUS_ITEM | MCI_TRACK, (DWORD)(LPVOID) &StatusParms ) )
		return( FALSE );

	if( StatusParms.dwReturn == MCI_CDA_TRACK_AUDIO )
		return( TRUE );

	return( FALSE );

}
//判斷是否正在播放
BOOL CCDAudio::IsPlaying( BOOL *pbPaused )
{

	*pbPaused = m_bPaused;

	return( m_bPlaying );

}
//跳躍到某個曲目的恰當地方
BOOL CCDAudio::SeekTo( int nTrack, int nMinute, int nSecond, int nFrame )
{

	if( !m_bOpened )
		return( FALSE );

	MCI_SEEK_PARMS SeekParms;
	SeekParms.dwTo = MCI_MAKE_TMSF( nTrack, nMinute, nSecond, nFrame );

	if( m_bPlaying && !m_bPaused )
		mciSendCommand( m_wDeviceID, MCI_PAUSE, 0, NULL );

	if( mciSendCommand( m_wDeviceID, MCI_SEEK, MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &SeekParms ) )
		return( FALSE );

	if( m_bPlaying && !m_bPaused )
		Play();

	return( TRUE );

}
//向前跳躍給定時間
void CCDAudio::SkipForward( int nSeconds )
{

	if( !m_bOpened )
		return;

	MCI_SET_PARMS SetParms;
	SetParms.dwTimeFormat = MCI_FORMAT_MILLISECONDS;

	mciSendCommand( m_wDeviceID, MCI_SET, MCI_WAIT | MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &SetParms );

	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;
	dwPos += (DWORD) nSeconds * 1000;
	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 );
	SetParms.dwTimeFormat = MCI_FORMAT_TMSF;
	mciSendCommand( m_wDeviceID, MCI_SET, MCI_WAIT | MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &SetParms );

	if( m_bPlaying && !m_bPaused )
		Play();

}
//向后跳躍給定時間
void CCDAudio::SkipBack( int nSeconds )
{

	if( !m_bOpened )
		return;

	MCI_SET_PARMS SetParms;
	SetParms.dwTimeFormat = MCI_FORMAT_MILLISECONDS;
	mciSendCommand( m_wDeviceID, MCI_SET, MCI_WAIT | MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &SetParms );

	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;
	dwPos -= (DWORD) nSeconds * 1000;
	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 );
	SetParms.dwTimeFormat = MCI_FORMAT_TMSF;
	mciSendCommand( m_wDeviceID, MCI_SET, MCI_WAIT | MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &SetParms );

	if( m_bPlaying && !m_bPaused )
		Play();

}
//打開光驅
void CCDAudio::OpenDrive( void )
{

	if( m_bOpened ){
		Stop();
		mciSendCommand( m_wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, NULL );
		}

}
//關閉光驅
void CCDAudio::CloseDrive( void )
{

	if( m_bOpened ){
		mciSendCommand( m_wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, NULL );
		Stop();
		}	

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷精品大在线视频 | 国产婷婷一区二区| 国产校园另类小说区| 亚洲自拍偷拍图区| 丁香激情综合国产| 欧美一区二区三区公司| 亚洲男人的天堂在线观看| 国产呦萝稀缺另类资源| 日韩欧美国产电影| ...xxx性欧美| 韩日精品视频一区| 日韩一区二区免费在线电影 | 偷拍亚洲欧洲综合| 色狠狠一区二区三区香蕉| 国产校园另类小说区| 久久99蜜桃精品| 欧美日韩激情在线| 亚洲精品乱码久久久久久黑人| 国产精品自在欧美一区| 欧美一级夜夜爽| 亚洲va国产va欧美va观看| 91丨porny丨国产入口| 久久精品欧美日韩精品| 狠狠色综合日日| 日韩亚洲欧美一区二区三区| 天天综合色天天综合色h| 99re热这里只有精品视频| 国产精品美女视频| 国产成人免费xxxxxxxx| 久久九九99视频| 国产美女在线精品| 久久久亚洲高清| 国产一区二区三区久久久| 欧美mv和日韩mv国产网站| 蜜臀va亚洲va欧美va天堂| 欧美三级日韩三级国产三级| 亚洲国产一区二区视频| 欧美性大战xxxxx久久久| 亚洲一区在线视频| 欧美日韩一区二区三区高清| 亚洲精品国产视频| 欧美精品一卡二卡| 亚洲精品一二三四区| 91麻豆免费观看| 一区二区高清免费观看影视大全| 色综合久久88色综合天天免费| 依依成人精品视频| 欧美日韩一级黄| 六月婷婷色综合| 亚洲高清视频中文字幕| 欧美一区二区三区四区高清| 日韩精品午夜视频| 久久综合久久鬼色中文字| 国产一区美女在线| 国产精品你懂的| 91黄色免费网站| 日韩精品久久理论片| 26uuu国产一区二区三区| 懂色中文一区二区在线播放| 中文字幕免费不卡在线| 色就色 综合激情| 久久精品久久精品| 欧美国产精品中文字幕| 在线看日韩精品电影| 免费观看成人鲁鲁鲁鲁鲁视频| 精品国产一区二区三区不卡| 不卡一卡二卡三乱码免费网站| 亚洲一区二区三区视频在线| 精品久久一区二区三区| 一本色道久久综合亚洲精品按摩| 男人的天堂亚洲一区| 国产精品素人一区二区| 欧美日精品一区视频| 丁香五精品蜜臀久久久久99网站| 亚洲精品菠萝久久久久久久| 日韩午夜激情电影| 91亚洲精品一区二区乱码| 九一九一国产精品| 亚洲色图在线播放| 精品国产精品网麻豆系列| 91麻豆6部合集magnet| 精品一区二区三区av| 亚洲成人午夜影院| 18成人在线观看| 欧美videofree性高清杂交| 91成人在线免费观看| 国产成人aaaa| 麻豆精品在线观看| 亚洲一区二区三区小说| 国产精品美女一区二区在线观看| 3d动漫精品啪啪| 日本高清视频一区二区| 丰满少妇在线播放bd日韩电影| 日韩激情视频网站| 亚洲国产日韩av| 国产精品动漫网站| 日本一区二区三区四区| 亚洲欧美日韩国产中文在线| 久久一夜天堂av一区二区三区| 欧美三级中文字幕| 日本精品视频一区二区三区| 成人综合婷婷国产精品久久| 激情综合五月婷婷| 美女久久久精品| 日韩综合在线视频| 午夜精品久久久久久久久久久 | 精品久久久久av影院| 欧美日韩在线亚洲一区蜜芽| 一本一道波多野结衣一区二区| 国产成人精品一区二| 国产精品夜夜嗨| 国产一二精品视频| 国产在线一区二区综合免费视频| 免费在线成人网| 久久精品国产在热久久| 免费成人av在线播放| 麻豆国产精品一区二区三区 | 91精品欧美久久久久久动漫| 欧美日韩国产小视频| 欧美日韩一区高清| 欧美精品久久天天躁| 69堂成人精品免费视频| 日韩一区二区三区免费观看 | 欧美狂野另类xxxxoooo| 欧美日韩亚洲国产综合| 欧美日韩精品免费观看视频| 欧美日韩精品一区二区三区蜜桃 | 91在线无精精品入口| 一本到不卡免费一区二区| 一本到一区二区三区| 欧美日韩免费电影| 日韩精品专区在线| 久久亚洲免费视频| 国产精品沙发午睡系列990531| 国产精品久久久久久久久久久免费看| 国产精品区一区二区三| 亚洲天堂2014| 亚洲福利视频一区| 精品一区二区三区在线观看国产| 国产自产视频一区二区三区| 国产成人免费在线| 在线一区二区三区四区| 91精品国产高清一区二区三区| 精品91自产拍在线观看一区| 中文字幕在线不卡| 日韩和欧美的一区| 国产**成人网毛片九色| 欧美午夜电影网| 日韩美女视频在线| 亚洲欧洲av另类| 视频在线观看国产精品| 国产揄拍国内精品对白| 色丁香久综合在线久综合在线观看| 欧美日韩视频在线一区二区| 久久无码av三级| 亚洲综合在线电影| 激情五月婷婷综合| 欧美三级一区二区| 国产日韩欧美高清在线| www.性欧美| 欧美一区二区三级| 一区二区国产视频| 久久激情五月激情| 欧美视频在线观看一区二区| 久久久久久久免费视频了| 免费成人av在线| 亚洲国产日韩av| 国产一区中文字幕| 日本精品裸体写真集在线观看| 色综合久久88色综合天天免费| 国产精品伊人色| 日韩影院在线观看| 欧美一级xxx| 亚洲高清三级视频| 日韩免费一区二区| 欧美日本高清视频在线观看| 91在线视频观看| 成人国产在线观看| 青青草成人在线观看| 精品国产乱码久久久久久浪潮| 亚洲精选视频免费看| 欧美肥胖老妇做爰| 蜜桃久久精品一区二区| 日韩欧美资源站| 大陆成人av片| 日韩极品在线观看| 精品电影一区二区| 风流少妇一区二区| 亚洲高清免费观看高清完整版在线观看| 日韩精品一区二区在线观看| 青青草国产精品亚洲专区无| 日韩三级电影网址| 91网站视频在线观看| 婷婷六月综合网| 怡红院av一区二区三区| 国产视频一区二区三区在线观看 | 国产成人综合视频| 2023国产精品视频| 欧美一区二区视频网站| 91麻豆免费看片|