c++ mfc mp3

c++ mfc mp3,第1张

用vc6.0写出来的

用到了MCI接口

成品

 新建mc.h 为了整洁

#ifndef __MY_PLAYER_CONTROL_H__
#define __MY_PLAYER_CONTROL_H__

#include //插入多媒体头文件
class CMyPlayerControl
{
public:
	CMyPlayerControl();//构造函数

	~CMyPlayerControl();//析构函数

public:
	BOOL Open(LPCSTR lpFileName);//打开文件

	void Play ();//播放

	void Close();//关闭

	void Stop ();//停止

	void Pause();//暂停

	DWORD GetLength (DWORD dwItem);//得到歌曲长度

	void SetwindowsHwnd (HWND hWnd);//设置主窗口句柄

private:
	MCI_OPEN_PARMS mciOpen;//打开设备参数

	HWND m_hWnd;//主窗口句柄

	DWORD dwFrom;//播放起始点
};
#endif

 新建mc.cpp 各种功能的实现

#include "stdafx.h"
#include "mc.h"//插入类的声明头文件

CMyPlayerControl::CMyPlayerControl()//构造函数
{
}
CMyPlayerControl::~CMyPlayerControl() //析构函数
{
	Close();//调用关闭
}

DWORD CMyPlayerControl::GetLength(DWORD dwItem)
{
//得到当前文件状态
	MCI_STATUS_PARMS mcistatusparms;
	mcistatusparms.dwCallback=(DWORD)m_hWnd;
	mcistatusparms.dwItem=dwItem;//状态类别值
	mcistatusparms.dwReturn=0;
	mciSendCommand (mciOpen.wDeviceID,
					MCI_STATUS,
					MCI_STATUS_ITEM,
					(DWORD)&mcistatusparms);
	return mcistatusparms.dwReturn;//返回长度
}
BOOL CMyPlayerControl::Open(LPCSTR lpFileName)
{
	//如果有打开的MCI设备就关闭
	if(mciOpen.wDeviceID) Close();
	//初始化 MCT OPENPARMS结构中的文件类型
	mciOpen.lpstrDeviceType=NULL;
	//播放文件路径
	mciOpen.lpstrElementName=lpFileName;
	//向MCI设备发送命令消息(在打开设备时,设备号为0>
	if(mciSendCommand(0,
					MCI_OPEN,
					MCI_DEVTYPE_WAVEFORM_AUDIO,
	(DWORD)&mciOpen))
	{
		return FALSE;
	}
	dwFrom=MCI_MAKE_HMS (0,0,0);//起始位置为0
	return TRUE;
}
void CMyPlayerControl::Play ()
{
	//播放参数结构
	MCI_PLAY_PARMS mciplayparms;//得到文件大小
	DWORD cdlen = GetLength(MCI_STATUS_LENGTH);
	DWORD cdto=MCI_MAKE_HMS(MCI_HMS_HOUR(cdlen),
			MCI_HMS_MINUTE (cdlen) ,
			MCI_HMS_SECOND(cdlen));//把文件中读出的大小转换为时间数量
	mciplayparms.dwCallback=NULL;
	mciplayparms.dwFrom=dwFrom;//设置起始位置
	mciplayparms.dwTo=cdto;//设置终止位置

	if(mciOpen.wDeviceID!=0)//判断是否打开文件
	{//播放音乐
		mciSendCommand (mciOpen.wDeviceID,
						MCI_PLAY,
						MCI_TO|MCI_FROM,
						(DWORD) (LPVOID)& mciplayparms);
	}
}
void CMyPlayerControl::Close()
{
	if(mciOpen.wDeviceID)
	{
	//执行McT CLOSE *** 作,关闭MCI设备
		mciSendCommand(mciOpen.wDeviceID,MCI_CLOSE,NULL,NULL);
	}
}
void CMyPlayerControl::Stop()
{
	if(mciOpen.wDeviceID)
	{
		//执行MCI STOP *** 作,停止播放音乐
		mciSendCommand(mciOpen.wDeviceID,MCI_STOP,NULL,NULL);//把播放位置设定为音乐文件的开头(使下一次播放 *** 作从文件开头位置开始)
		mciSendCommand(mciOpen.wDeviceID,
						MCI_SEEK,
						MCI_SEEK_TO_START,NULL);
	}
	dwFrom = MCI_MAKE_HMS(0,0,0);//把起始位置设置为0
}
void CMyPlayerControl::Pause()
{
	if(mciOpen.wDeviceID)
	{//执行MCI_PAUSE *** 作,暂停播放音乐
		DWORD dwsf=GetLength(MCI_STATUS_POSITION);
		dwFrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(dwsf),
							MCI_MSF_SECOND(dwsf),
							MCI_MSF_FRAME(dwsf));
//执行MCT PAUSE *** 作,暂停播放音乐
		mciSendCommand(mciOpen.wDeviceID,MCI_PAUSE,NULL,NULL);
	}
}
void CMyPlayerControl::SetwindowsHwnd (HWND hWnd)
{
	m_hWnd = hWnd;//把当前父窗口的句柄传入
}



然后自己写调用

注意:

进度条要建立连接(卡了我好久);

要看懂代码运行逻辑;

文件在github上

GitHub - 123duoyun/MP3: c++ mfc mp3

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/564093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-03
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)

保存