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

实现功能:

1)        播放

2)        暂停/恢复

3)        停止

4)        音量调节

 

实现步骤:

1创建工程

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

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

点击确认之后:

MFC入门-MCI简单音乐播放器实现_程序代码_02

点击下一步:

MFC入门-MCI简单音乐播放器实现_加载_03

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

MFC入门-MCI简单音乐播放器实现_程序代码_04

点击“下一步”:

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

点击“下一步”:

MFC入门-MCI简单音乐播放器实现_控件_06

默认选项,点击“完成”

MFC入门-MCI简单音乐播放器实现_程序代码_07

默认生成的界面。

2界面制作

界面制作如下:

音乐播放界面

MFC入门-MCI简单音乐播放器实现_音量调节_08

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

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

浏览按钮:IDC_filechoice

播放按钮:IDC_play

暂停按钮:IDC_pause

停止按钮:IDC_stop

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

音量滑动条:IDC_SLIDER1

版本说明按钮:IDC_about

退出软件按钮:IDC_exitbtn

软件说明界面:

MFC入门-MCI简单音乐播放器实现_控件_09

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);
}