当前位置:C++技术网 > 资讯 > MFC学习实践之简易音乐播放器(二)完整主界面控件说明及编写最简音乐播放器

MFC学习实践之简易音乐播放器(二)完整主界面控件说明及编写最简音乐播放器

更新时间:2017-03-08 10:43:25浏览次数:1+次

本节目录:

1. 完整主界面控件解释说明

2.最简音乐播放器界面设计与类成员变量添加

3. 功能代码实现

4.  演示


    回顾上一节内容,刚开始演示了播放器主界面,随后,对播放器所使用到的核心API函数做了基本的说明演示!那么在主界面中具体涉及到哪些控件,以及位置如何摆放呢?

1.  完整主界面控件解释说明

还是一样的,首先贴出完整的主界面控件图。位置及界面控件可自定义,并无严格的要求!


①   列表框控件(ListBox Control

②   图片控件(Picture Control

③   滑块控件(Slider Control

④   组合框控件(Combo-box Control

⑤   按钮控件(Button Control

⑥   单选按钮控件(Radio-button  Control

⑦   分组控件(Group box Control

⑧   其他的空白及文字部分统一用的静态文本控件(Static Text  Control)

限于篇幅,这里就只列举出控件名称,各个控件的大概用法会在后面做出一定说明,想了解详细功能用法的可自行搜索!

 

2.最简音乐播放器界面设计与类成员变量添加

         下面我们利用MFC创建对话框程序,并对上节提到的音乐播放功能做出改进!(由于VS2017安装完成之后,VC6.0失效了,因此后面的项目内容统一采用Visual Studio 2017)

创建MFC应用程序项目工程,并取名为MusicPlayer

    具体参数设置如下:

    应用程序类型:基于对话框(方便设计界面)。

    MFC的使用:在静态库中使用MFC(编译得到的程序可自由地在其他PC电脑上运行,不需要装额外的MFC运行环境)。

    其他的保持默认。


利用向导生成MFC应用程序并自定义程序界面


 利用类向导添加相应的成员变量和对应消息响应函数

(对于vs2017而言,可在菜单项目->类向导中进入添加)

控件说明:

    添加Static Text静态文本控件,标题文字设置为:“文件路径:”。

    添加Edit文本编辑控件,ID设置为ID_EDITPATH,成员变量设置为CString  m_strPath。

    添加Static Text静态文本控件,标题文字留空,ID设置为IDC_STATICNOWPLAYPATH,成员变量设置为CString m_strNowPlayPath。

    添加Button按钮控件,标题文字设置为:选择音乐文件,ID设置为IDC_BUTTONSEL

更改确认按钮文字显示为播放,ID设置为IDPLAY。取消按钮文字设置为停止,ID 设置为IDSTOP。播放按钮成员变量设置为:CButton m_btnPlay;

 


    利用类向导生成按钮点击响应函数。

    Void OnClickedButtonsel();//文件选择

    Void OnClickedIdplay();//播放按钮

    Void OnClickedIdstop();//停止按钮

3.功能代码实现

    在MusicPlayerDlg.h中有如下几个成员变量:

public:
	CString m_strPath;
	CString m_strNowPlayPath;
	afx_msg void OnClickedButtonsel();

	afx_msg void OnBnClickedOk();
	afx_msg void OnBnClickedCancel();

private:
          // 音乐播放状态 
           //0 初始状态 1 音乐文件打开或停止状态 2 音乐文件播放状态 3 音乐文件暂停状态 
	int m_PlayStatus;
public:
	afx_msg void OnDestroy();
	CButton m_btnPlay;
	afx_msg void OnClickedIdplay();
	afx_msg void OnClickedIdstop();


在MusicPlayerDlg.cpp文件中,各响应函数的代码为:

BOOL CMusicPlayerDlg::OnInitDialog()//对话框初始化
{
	CDialogEx::OnInitDialog();

	...........//中间系统自动生成的代码省略


	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	m_PlayStatus = 0;  //音乐文件状态初始化代码
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
void CMusicPlayerDlg::OnClickedButtonsel()//文件选择
{
	// TODO: 在此添加控件通知处理程序代码
	/*
	CFileDialog MFC中的文件打开保存对话框,CFileDialog的构造函数原型为:

	*/
	CFileDialog fdlg(TRUE,_T(".mp3"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT, _T("歌曲(.mp3)|*.mp3||"), NULL);
	if(fdlg.DoModal()==IDOK)
	{
		CString cmd = _T("");//定义命令字符串
		m_strPath = fdlg.GetPathName();//获取文件对话框选择的文件全路径
		TCHAR ShortPath[MAX_PATH] = _T("");
		GetShortPathName(m_strPath, ShortPath, MAX_PATH);//将全路径转化为短路径
		 //如果文件处于打开或者其他状态 先关闭已打开的文件后再打开新选择的音乐文件
		if (m_PlayStatus !=0)
		{
			cmd = _T("close music");
			if (mciSendString(cmd, NULL, 0, NULL) == 0)
			{
				m_PlayStatus = 0;//设置音乐文件状态为初始状态
				m_strNowPlayPath = _T("歌曲文件已关闭");
				UpdateData(FALSE);
			}
			else
			{
				MessageBox(_T("音乐文件关闭错误"));
			}
		}
		//如果文件处于初始状态状态 直接打开音乐文件
		if (m_PlayStatus == 0)
		{
		//	MessageBox(ShortPath);
			/*
			特别提示:在win7及以下系统中  利用GetShortPathName获取文件短路径后即可直接播放,
			但在win10系统中如果遇到文件中含有空格会出错,因此,对于win10系统,音乐文件全路径需要用""包含
			*/
			cmd.Format(_T("open \"%s\" alias music"), ShortPath);//字符串拼接  open 音乐文件全路径 alias 文件别名
			MCIERROR r = mciSendString(cmd, NULL, 0, NULL);
			if ( r== 0)
			{
				m_PlayStatus = 1;
				m_strNowPlayPath = _T("歌曲已选泽");
				UpdateData(FALSE);
			}
			else
			{
				TCHAR erStr[MAX_PATH] = _T("");
				mciGetErrorString(r, erStr, MAX_PATH);//如果文件打开遇到错误,输出错误提示语句
				MessageBox(erStr);
				MessageBox(_T("音乐文件打开错误"));
			}
		}
	
	}
}
void CMusicPlayerDlg::OnClickedIdplay()//音乐播放暂停
{
	// TODO: 在此添加控件通知处理程序代码
	CString cmd = _T("");
	switch (m_PlayStatus)
	{
	case 1://文件打开状态播放音乐
		cmd = _T("play music");
		if (mciSendString(cmd, NULL, 0, NULL) == 0)
		{
			m_PlayStatus = 2;//状态设置为播放状态
			m_strNowPlayPath = _T("正在播放歌曲!");
			m_btnPlay.SetWindowTextW(_T("暂停"));//设置按钮文本显示为暂停
			UpdateData(FALSE);
		}
		else
		{
			MessageBox(_T("音乐播放错误"));
		}
		break;
	case 2://文件播放状态暂停音乐
		cmd = _T("pause music");
		if (mciSendString(cmd, NULL, 0, NULL) == 0)
		{
			m_PlayStatus = 3;//状态设置为暂停状态
			m_strNowPlayPath = _T("音乐暂停!");
			m_btnPlay.SetWindowTextW(_T("播放"));//设置按钮文本显示为播放
			UpdateData(FALSE);
		}
		else
		{
			MessageBox(_T("音乐暂停错误"));
		}
		break;
	case 3:
		cmd = _T("resume music");
		if (mciSendString(cmd, NULL, 0, NULL) == 0)
		{
			m_PlayStatus = 2;//状态恢复为播放状态
			m_strNowPlayPath = _T("正在播放歌曲!");
			m_btnPlay.SetWindowTextW(_T("暂停"));//设置按钮文本显示为暂停
			UpdateData(FALSE);
		}
		else
		{
			MessageBox(_T("音乐恢复播放错误"));
		}
		break;
	}
}
void CMusicPlayerDlg::OnClickedIdstop()//音乐停止
{
	CString cmd = _T("seek music to start");//seek 命令使音乐文件进度归0  并停止播放
	if (mciSendString(cmd, NULL, 0, NULL) == 0)
	{
		m_PlayStatus = 1;//状态设置为文件打开或停止状态
		m_btnPlay.SetWindowTextW(_T("播放"));
		m_strNowPlayPath = _T("正在播放歌曲!");
		UpdateData(FALSE);
	}
	else
	{
		MessageBox(_T("音乐停止播放错误"));
	}
	// TODO: 在此添加控件通知处理程序代码
}
void CMusicPlayerDlg::OnDestroy()//窗口销毁  程序退出
{
	CDialogEx::OnDestroy();
	CString cmd = _T("close music");
	if (mciSendString(cmd, NULL, 0, NULL) == 0)
	{
		m_PlayStatus = 0;//状态设置为初始状态 虽然程序直接退出了加不加并没有什么用
	}
	else
	{
		MessageBox(_T("音乐文件关闭错误"));
	}
	// TODO: 在此处添加消息处理程序代码
}


CFileDialog类补充说明:

CFileDialog构造函数原型如下:
CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL,LPCTSTR lpszFileName = NULL,

DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );


参数意义如下:
bOpenFileDialog          为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。
lpszDefExt                   指定默认的文件扩展名。例如:“.mp3”
lpszFileName              指定默认的文件名。一般保存对话框用的比较多
dwFlags                       指明一些特定风格。 (默认OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT)
lpszFilter                     指明可供选择的文件类型和相应的扩展名。
pParentWnd                为父窗口指针。

扩展名应遵循下面的格式:
"mp3文件 (*.mp3)|*.mp3| wav (*.wav)|*.wav| 音乐文件 (*.mp3;*.wav)|*.mp3 ; *.wav| All Files (*.*)|*.*||";
文件类型说明和扩展名间用 | 分隔,同种类型的文件扩展名之间可以用 ; 来分割,不用文件类型之间用 | 分隔,末尾用 || 指明结束。


更多详细使用方法可自行搜索CFileDialog。

也可参考站内教程:

学习心得之五,MFC编程中两种文件对话框的创建

学习心得之六,MFC编程中两种文件对话框的浅出


4.功能演示

点击了文件选择之后:



文件选择后点击播放按钮:



    至此:一个最简单的带界面的音乐播放器就这样形成了!由于之前的VC6.0编写的音乐播放器过于杂乱,不利于分享代码!因此,只好利用vs2017重写一遍!后面功能的添加及代码实现,都会在今天的这个最简播放器的基础上实现,俗话说万地高楼平地起!只能慢慢添砖加瓦了!毕竟都是自学的,每个小节中难免会有些不足及错误之处!敬请谅解!

    下一节目测会优化界面,添加音乐文件列表控件及菜单功能!