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

📄 mcimp3.cpp

📁 深入学习VC++得很难得的一本好书 里面配有大量的源代码 并有详细的解释
💻 CPP
字号:
// MCIMP3.cpp: implementation of the MCIMP3 class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MCIMP3.h"

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

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

MCIMP3::MCIMP3()
{	//初始化数据成员
	m_wID                 = -1;
	m_dwLength            = 0;
}

MCIMP3::~MCIMP3()
{
	MCIClose();
}

DWORD MCIMP3::MCIOpen(CString &strPath)
{	//打开MP3文件

	//用mci命令打开lpstrPath指示的MP3文件
	//返回mci命令的错误信息
	MCI_OPEN_PARMS mciOP;
	DWORD dwReturn;

	//由mci判断文件类型
	mciOP.lpstrDeviceType=NULL;
	mciOP.lpstrElementName=strPath;
	dwReturn=mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT | MCI_OPEN_SHAREABLE,
		(DWORD)(LPVOID)&mciOP);
	if (dwReturn==0)
	{	m_wID=mciOP.wDeviceID;
		if (this->MCIGetLength(&m_dwLength)!=0)
			m_dwLength=0;
	}
	else
		m_wID=NULL;
	return dwReturn;

}

DWORD MCIMP3::MCIClose()
{	//关闭当前打开的MP3文件

	//用mci命令关闭当前打开的MP3文件
	//返回mci命令的错误信息
	MCI_GENERIC_PARMS mciGP;

	return mciSendCommand(m_wID, MCI_CLOSE, MCI_NOTIFY|MCI_WAIT,
		(DWORD)(LPVOID)&mciGP);
}

DWORD MCIMP3::MCIPlay()
{	//播放当前的MP3文件

	//用mci命令播放已打开(当前)的MP3文件
	//返回mci命令的错误信息
	MCI_PLAY_PARMS mciPP;

	//mciPP.dwCallback=(DWORD)GetSafeHwnd();
	return mciSendCommand(m_wID, MCI_PLAY, MCI_NOTIFY,
		(DWORD)(LPVOID)&mciPP);
}

DWORD MCIMP3::MCIPause()
{	//暂停播放

	//用mci命令暂停播放
	//返回mci命令的错误信息
	MCI_GENERIC_PARMS mciGP;

	return mciSendCommand(m_wID, MCI_PAUSE, MCI_NOTIFY|MCI_WAIT,
		(DWORD)(LPVOID)&mciGP);
}

DWORD MCIMP3::MCIResume()
{	//恢复播放

	//用mci命令恢复播放
	//返回mci命令的错误信息
	MCI_GENERIC_PARMS mciGP;

	return mciSendCommand(m_wID, MCI_RESUME, MCI_NOTIFY|MCI_WAIT,
		(DWORD)(LPVOID)&mciGP);
}

DWORD MCIMP3::MCIStop()
{	//停止播放

	//用mci命令停止播放(效果与Pause相同)
	//返回mci命令的错误信息
	MCI_GENERIC_PARMS mciGP;

	return mciSendCommand(m_wID, MCI_STOP, MCI_NOTIFY|MCI_WAIT,
		(DWORD)(LPVOID)&mciGP);
}

DWORD MCIMP3::MCISeekTo(DWORD dwTo)
{	//跳到dwTo指示的位置,单位为秒

	//(含参数检查)
	//用mci命令跳到dwTo指示的位置,单位为秒
	//返回mci命令的错误信息
	DWORD dwReturn;
	
	if (dwTo>0 && dwTo<m_dwLength)
	{	MCI_SEEK_PARMS mciSP;
		mciSP.dwTo=dwTo*1000;
		dwReturn = mciSendCommand(m_wID, MCI_SEEK, MCI_WAIT|MCI_NOTIFY|MCI_TO,
			(DWORD)(LPVOID)&mciSP);
	}else if (dwTo>=m_dwLength)
		dwReturn = MCISeekToEnd();
	else
		dwReturn = MCISeekToStart();
	return dwReturn;
}

DWORD MCIMP3::MCISeekToStart()
{	//跳到当前MP3文件开始处

	//用mci命令跳到当前MP3文件开始处
	//返回mci命令的错误信息
	MCI_SEEK_PARMS mciSP;
	return mciSendCommand(m_wID, MCI_SEEK, MCI_WAIT|MCI_NOTIFY|MCI_SEEK_TO_START,
		(DWORD)(LPVOID)&mciSP);
}

DWORD MCIMP3::MCISeekToEnd()
{	//跳到当前MP3文件末尾处

	//用mci命令跳到当前MP3文件末尾处
	//返回mci命令的错误信息
	MCI_SEEK_PARMS mciSP;
	return mciSendCommand(m_wID, MCI_SEEK, MCI_WAIT|MCI_NOTIFY|MCI_SEEK_TO_END,
		(DWORD)(LPVOID)&mciSP);
}

DWORD MCIMP3::MCIGetLength(DWORD *dwLength)
{	//取得当前打开的MP3文件的长度,单位为秒

	//用mci命令取得当前打开的MP3文件的长度,单位为秒,用dwLength返回
	//返回mci命令的错误信息
	MCI_STATUS_PARMS mciSP;

	mciSP.dwItem=MCI_STATUS_LENGTH;
	DWORD dwReturn=mciSendCommand(m_wID, MCI_STATUS, MCI_STATUS_ITEM,
		(DWORD)(LPVOID)&mciSP);
	if (dwReturn==0)
		*dwLength=mciSP.dwReturn/1000;
	return dwReturn;
}

DWORD MCIMP3::MCIGetPos(DWORD *dwPos)
{	//取得当前打开的MP3文件的当前位置,单位为秒

	//用mci命令取得当前打开的MP3文件的当前位置,单位为秒,用dwPos返回
	//返回mci命令的错误信息
	MCI_STATUS_PARMS mciSP;

	mciSP.dwItem=MCI_STATUS_POSITION;
	DWORD dwReturn=mciSendCommand(m_wID, MCI_STATUS, MCI_STATUS_ITEM,
		(DWORD)(LPVOID)&mciSP);
	if (dwReturn==0)
		*dwPos=mciSP.dwReturn/1000;
	return dwReturn;
}

DWORD MCIMP3::MCISetMute(BOOL bMute)
{	//设置静音或取消静音

	//用mci命令设置静音(bMute=true)或取消静音(bMute=false)
	//返回mci命令的错误信息
	MCI_SET_PARMS mciSP;
	mciSP.dwAudio=MCI_SET_AUDIO_ALL;
	DWORD dwFlags;
	if (bMute)
		dwFlags=MCI_WAIT|MCI_SET_AUDIO|MCI_SET_OFF;
	else
		dwFlags=MCI_WAIT|MCI_SET_AUDIO|MCI_SET_ON;
	return mciSendCommand(m_wID, MCI_SET, dwFlags,
		(DWORD)(LPVOID)&mciSP);
}

BOOL MCIMP3::MCIIsPlaying()
{	//返回是否正在播放

	//用mci命令询问是否正在播放
	//返回是否正在播放
	MCI_STATUS_PARMS mciSP;

	mciSP.dwItem=MCI_STATUS_MODE;
	DWORD dwReturn=mciSendCommand(m_wID, MCI_STATUS, MCI_STATUS_ITEM,
		(DWORD)(LPVOID)&mciSP);
	if (dwReturn==0)
		if (mciSP.dwReturn==MCI_MODE_PLAY)
			return true;
	return false;
}

BOOL MCIMP3::MCIIsOpened()
{	//是否有MP3文件打开

	//用mci命令询问有否文件打开
	//返回有否文件打开
	MCI_STATUS_PARMS mciSP;

	mciSP.dwItem=MCI_STATUS_MODE;
	DWORD dwReturn=mciSendCommand(m_wID, MCI_STATUS, MCI_STATUS_ITEM,
		(DWORD)(LPVOID)&mciSP);
	if (dwReturn==(DWORD)0)
		if (mciSP.dwReturn==MCI_MODE_OPEN ||
			mciSP.dwReturn==MCI_MODE_PLAY ||
			mciSP.dwReturn==MCI_MODE_PAUSE ||
			mciSP.dwReturn==MCI_MODE_STOP ||
			mciSP.dwReturn==MCI_MODE_SEEK
			)
			return true;
	return false;
}

⌨️ 快捷键说明

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