MFC入门-MCI简单音乐播放器实现

46 篇文章 2 订阅

MFC入门-MCI简单音乐播放器实现

实现功能:

1)        播放

2)        暂停/恢复

3)        停止

4)        音量调节

 

实现步骤:

1创建工程

打开VS2010,新建-》文件-》新建项目:

点击确认之后:

点击下一步:

选择“基于对话框”,点击“下一步”:

点击“下一步”:

点击“下一步”:

默认选项,点击“完成”

默认生成的界面。

2界面制作

界面制作如下:

音乐播放界面

这里说明每个控件对应的Id:

文件名称后面的编辑框:IDC_filename

浏览按钮:IDC_filechoice

播放按钮:IDC_play

暂停按钮:IDC_pause

停止按钮:IDC_stop

音量调节里面的编辑框:IDC_volume

音量滑动条:IDC_SLIDER1

版本说明按钮:IDC_about

退出软件按钮:IDC_exitbtn

软件说明界面:

3逻辑功能实现

3.1软件说明:

void Cmfc_music_playerDlg::OnBnClickedabout()
{
	// TODO: 在此添加控件通知处理程序代码
	CAboutDlg dlg;
	dlg.DoModal(); //弹出软件说明
}

3.2退出软件:

void Cmfc_music_playerDlg::OnBnClickedexitbt()
{
	// TODO: 在此添加控件通知处理程序代码
	CDialog::OnCancel(); //退出
}

3.3加载

添加头文件和库:

#include <MMSystem.h>
#include <Digitalv.h>

#pragma comment(lib, "Winmm.lib")

//定义三个全局变量
HWND m_hWnd;
DWORD DeviceId;
MCI_OPEN_PARMS mciopenparms;

//加载
void Load(HWND hWnd, CString strFilepath)
{
	m_hWnd = hWnd;
	mciSendCommand(DeviceId, MCI_CLOSE, 0, 0); //在加载文件前先清空上一次播放的设备
	mciopenparms.lpstrElementName = strFilepath; //将音乐文件路径传给设备
	DWORD dwReturn;
	if (dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT, (DWORD)(LPVOID)&mciopenparms))
	{
		//如果打开玩家失败,将出错信息储存在buffer,并显示出错警告
		char buffer[256];
		mciGetErrorString(dwReturn, buffer, 256); //获取错误码对应的错误信息
		MessageBox(hWnd, buffer, "出错警告!", MB_ICONHAND | MB_ICONERROR | MB_ICONSTOP); //弹出错误信息提示对话框
	}
	DeviceId = mciopenparms.wDeviceID;
	//打开文件成功就关联文件到设备
}

3.4播放
//播放
void play()
{
	MCI_PLAY_PARMS mciplayparms;
	mciplayparms.dwCallback = (DWORD)m_hWnd;
	mciplayparms.dwFrom = 0; //每次播放都是从0开始播放
	mciSendCommand(DeviceId, MCI_PLAY, MCI_FROM | MCI_NOTIFY, (DWORD)(LPVOID)&mciplayparms);
}
3.5暂停

void pause()
{
	mciSendCommand(DeviceId, MCI_PAUSE, 0, 0);
}

3.6恢复
void resume()
{
	mciSendCommand(DeviceId, MCI_RESUME, 0, 0);
}
3.7停止

void stop()
{
	mciSendCommand(DeviceId, MCI_STOP, 0, 0);
	mciSendCommand(DeviceId, MCI_CLOSE, 0, 0);
	//当点击停止按钮时,将所有的信息都清除掉
}

3.8音量调节

//设置音量
DWORD setVolume(DWORD vol)
{
	MCI_DGV_SETAUDIO_PARMS setvolume; //设置音量的参数结构体
	setvolume.dwCallback = NULL; //
	setvolume.dwItem = MCI_DGV_SETAUDIO_VOLUME; //动作是设置音量
	setvolume.dwValue = vol; //音量值是vol
	mciSendCommand(DeviceId, MCI_SETAUDIO, MCI_DGV_SETAUDIO_ITEM | MCI_DGV_SETAUDIO_VALUE, (DWORD)(LPVOID)&setvolume);
	return 0;
}

4界面事件关联

4.1文件选择

void Cmfc_music_playerDlg::OnBnClickedfilechoice()
{
	// TODO: 在此添加控件通知处理程序代码
	char szFileFilter[] = "mp3文件(*.mp3)|*.mp3|"
							"wma文件(*.wma)|*.wma|"
							"wav文件(*.wav)|*.wav|"
							"所有文件(*.*)|*.*|";
	CFileDialog dlg(true, NULL, NULL, OFN_HIDEREADONLY, szFileFilter);
	if (dlg.DoModal() == IDOK)
	{
		CString strFilepath = dlg.GetPathName();
		CString strFilename = dlg.GetFileName();
		SetDlgItemText(IDC_filename, strFilename);
		Load(this->m_hWnd, strFilepath);
	}
	GetDlgItem(IDC_play)->EnableWindow(true); //文件读取成功时所有按钮变成可选
	GetDlgItem(IDC_pause)->EnableWindow(true);
	GetDlgItem(IDC_stop)->EnableWindow(true);
}

4.2播放按钮

void Cmfc_music_playerDlg::OnBnClickedplay()
{
	// TODO: 在此添加控件通知处理程序代码
	play();
	SetDlgItemText(IDC_pause, "暂停");
}

4.3暂停/恢复按钮

void Cmfc_music_playerDlg::OnBnClickedpause()
{
	// TODO: 在此添加控件通知处理程序代码
	CString strTemp;
	GetDlgItemText(IDC_pause, strTemp); //获取按钮的状态
	if (strTemp.Compare("暂停") == 0)
	{
		pause();
		SetDlgItemText(IDC_pause, "恢复");
	}

	if (strTemp.Compare("恢复") == 0)
	{
		resume();
		SetDlgItemText(IDC_pause, "暂停");
	}
}

4.4停止按钮
void Cmfc_music_playerDlg::OnBnClickedstop()
{
	// TODO: 在此添加控件通知处理程序代码
	stop();
	SetDlgItemText(IDC_pause, "暂停");
	GetDlgItem(IDC_play)->EnableWindow(false); //当按下stop的时候,播放和暂停不可选
	GetDlgItem(IDC_pause)->EnableWindow(false);
}

CSDN下载:http://download.csdn.net/detail/u012377333/9520199
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值