网站首页  词典首页

请输入您要查询的论文:

 

标题 基于MFC的音乐播放器的实现
范文

    余安乾 陈伯亨

    

    摘要:利用VisualStudio开发工具基于MFC(Microsoft Foundation Class)实现一个简易的音乐播放器,该文首先简单介绍当前市面上一些音乐播放器和制作播放器的开发工具中QT与MFC的区别,再详细说明如何使用文件对话框,媒體控制接口设计简易的音乐播放器。

    关键词:播放器;MFC

    中图分类号:G642? ? ? ? 文献标识码:A

    文章编号:1009-3044(2020)30-0080-02

    1 音乐播放器的描述

    音乐播放器是人们生活中必不可少的东西,任何人都有属于自己心中的那份特殊的情感,音乐即表达情感和寄托情感的语言。当前比较火热的音乐播放器有QQ音乐,网易音乐,酷狗音乐,当然还有其他小众的播放器,由此可见播放器种类多,但总有符合自己风格的音乐播放器。设计音乐播放器将用到VisualStudio开发工具,基于MFC设计一款音乐播放器,实现打开音乐文件,点击歌曲列表中的歌曲进行播放、暂停,显示歌曲的时间和歌词和显示背景图片等功能。

    2 设计思路

    制作音乐播放器就像是开发一个软件,要先有思路再去实践。开发软件是要做什么?所开发的软件要达到怎样的功能?每个功能怎样去实现[1] ?对此,首先需要先思考,对整个过程有个思路。音乐播放器的主要功能就是播放音乐,首先需要用CFileDialog打开文件对话框选择需要的音乐文件,包括MP3文件,WMA文件,WAV文件,将所需音乐文件的路径一一获取。其次通过MFC的控件listcontrol显示选择的多首歌曲名字或歌曲路径,listcontrol控件添加的事件将会判断鼠标点击的歌曲所在列表控件的行号,由此获得此歌曲所在的路径。最后交给媒体控制接口提供的mciSendCommand函数实现打开音乐文件、播放音乐、暂停音乐和控制音量等功能。进一步优化时,要实现歌曲的时间显示和歌词的显示则都需要定时器。通过引发Timer事件,Timer控件可以有规律地每隔一定的时间就可以执行一次Timer控件代码段内部的代码[2]。

    3 音乐播放器的实现

    使用VisualStudio可以有其他的方法制作音乐播放器,除了MFC还可以使用QT,各有各的优劣。QT开发能跨平台、多平台开发,MFC主要针对Windows,相比之下QT界面设计比MFC方便,比MFC设计出来的画面更细腻。而MFC运行程序效率高,安全性也好。MFC应用程序框架是生成一般的MFC应用程序所需要的基本骨架,由多个类组成,它定制了应用程序的结果和源代码,借助MFC应用程序框架,人们可以将主要精力放在系统的关键业务内容上,而不需要去考虑界面等应用程序的共性部分[3]。所以选择MFC来完成音乐播放器的实现方式是可行的,可靠的,下面是实现的步骤。

    3.1 创建工程

    首先,用VisualStudio2017新建项目,选择MFC应用程序,命名MUSIC_MFC,点击下一步,注意选择基于对话框并创建,这样就完成了项目的初始化创建。

    3.2 视图添加所需控件

    在资源文件中点击MUSICMFC.rc,点击资源视图中的Dialog,进入IDD_MUSIC_MFC_DIALOG,添加四个按钮,分别是打开文件按钮,播放音乐按钮,暂停歌曲按钮和关闭窗口按钮,并在按钮控件属性栏里分别命名为IDC_BUTTON_OPEN,IDC_BUTTON_PLAY,IDC_BUTTON_PAUSE,IDC_BUTTON_CLOSE,命名必须意思明确,简单易懂,易于控件的调用和审查代码。

    每个按钮添加事件,双击按钮控件即可自动创建事件,并跳转到当前按钮事件。添加Slider控件,为控件添加变量m_sliderVol,Slider控件用来控制音乐的音量,然后添加StaticText控件,命名IDC_STATIC_VOL,添加变量m_volume,这个文本控件可以显示音量的大小。

    3.3 完善按钮事件

    在CMUSICMFCDlg类中先声明一个MCIDEVICEID类的m_DeviceID,初始化为0,以此来接受命令的设备ID,首先需要打开音乐文件,那么在打开按钮事件里用到CFileDialog类创建对象dlg,打开文件对话框,筛选MP3文件,声明一个CString类的strMusicFile来获得文件目录,mciSendCommand发送消息MCI_OPEN以打开文件。

    打开按钮事件中指定了音乐文件并打开过后,为了让其音乐播放则在播放按钮事件中添加mciSendCommand发送MCI_PLAY命令播放音乐文件,同时要实现暂停音乐的功能,也是需要用MCI发送消息,直接添加if语句判断mciSendCommand发送MCI_PAUSE使音乐暂停或MCI_RESUME使音乐继续播放。

    3.4 音量大小滑动控件

    双击Slider控件自动添加事件,控件的GetPos()函数获取当前滑动位置赋值给变量m_volume以显示音量大小,mciSendCommand发送命令传数值改变音量大小。

    3.5 背景图片的添加

    要使这个简易的音乐播放器显得美观一点,可以在资源视图的BITMAP里添加图片资源background.bmp并命名为IDB_BITMAP_GB,然后进入类向导,找到当前CMUSICMFCDlg类的消息中的OnPaint函数,进行贴图即可。贴图时可能会出现背景只显示了background.bmp图片的一部分,解决这问题也不难,使用SetStretchBltMode来优化图片,防止失真,再对图片进行StretchBlt缩小拉伸至所需大小。

    4 播放器的优化

    4.1 界面优化

    在之前的基础上增添了标题栏和播放栏,设计标题栏和播放栏与背景的贴图操作相似,都是在OnPaint函数里,然后使用函数FillSolidRect,设置好标题栏宽度和颜色。然后为了鼠标在标题栏位置能够拖动播放器窗口,在类向导中找到消息WM_NCHITTEST,函数OnNcHitTest中用if语句判断变量nHitTest的值等于HTCLIENT或者HTCAPTION以此确定鼠标位置在客户区还是在标题栏上。

    添加了更换背景图片的按钮,用到了picture控件,为其添加变量m_pictureControl,与背景图片的贴图操作相似,难点在于如何才能每次点击更换背景按钮后台就能判断并更换LoadBitmap函数的参数从而实现不同图片的切换。双击picture控件添加事件,在事件中,switch语句中对整型变量pic_num进行判断,每当点击更换背景按钮,变量pic_num都会加一,case语句中调用LoadBitmap函数就能实现不同图片的加载。

    用Photoshop画了播放按钮,关闭按钮,打开按钮的图片,分别都有鼠标按下状态和正常状态下的图片,将所有图片转化为BMP格式添加到项目资源里同时对其命名,以便查找。每个按钮变量在项目的初始化函数OnInitDialog中调用LoadBitmaps()函数,其参数有四个,有初始化加载的图片,按下状态的图片,获取焦点的图片和正常状态的图片,项目中每个按钮都只需用到两张图片,所以函数传入两个参数分别是初始化加载状态和按下状态的图片,

    4.2 功能优化

    将播放按钮和暂停按钮能够合成一个按钮,节省控件的使用,减少代码量,将播放音乐代码封装成函数MusicPlay(),在播放按钮事件中直接调用函数,再使用if语句判断歌曲使其暂停播放还是继续播放。

    建两个Static文本控件命名IDC_STATIC_LYRIC显示歌曲的播放时长和IDC_STATIC_LYRIC显示歌词。进入项目的类向导,在CMUSICMFCDlg类的消息中找到WM_TIMER,点击Ontimer函数进行添加代码,MCI指令中的MCI_STATUS_POSITION功能是获得当前播放的位置,MCI_STATUS_LENGTH是获取歌曲文件总长度,返回的信息皆在dwReturn成员变量中,将获得当前歌曲时长和总时长封装成两个函数GetNow和GetLength,在Ontimer函数中将得到的时长通过计算成小时,分钟,秒钟,合成“00:00:00”的结构,设置SetDlgItemText函数显示时间在文本控件IDC_STATIC_LYRIC上。

    当点击歌曲时就打开相应歌曲的歌词文件,创建对象CStdioFile类的对象file,使用file.Open函数打开歌词文件,利用file.ReadString函数套上循环体将歌文件中的时间和对应的词一行一行地提取出来存进一个包含有時间成员变量和歌词成员变量的结构体数组,最后在OnTimer函数中用if语句把当前时间与结构体中的时间作比较,若时间对应上则显示当前时间的那一行歌词。

    5 结束语

    实现一个基于MFC的音乐播放器的不难,难的是一开始对MFC的不熟悉,对媒体控制接口的不了解,不知该从何下手,应了“万事开头难”这句话。不管是做什么,开发小程序或实现其他项目都需要通过自主学习,光靠书本知识是不行的。

    完成的简易的播放器,当然有很多可以优化的地方,比如界面还能更美观,结合数据库获取更多网上的歌曲资源,还能设计更多的功能等。做一个小项目的经验对于之后的程序设计和项目开发肯定很有帮助。做得好,那编程的自信心自然会提升,做得不好也能从中发现不足,分析问题不断进步。

    参考文献:

    [1] 刘俊杰.计算机软件开发探究[J].科技风,2020(11):108.

    [2] 张艳丽.VisualC++6.0下媒体播放器的实现[J].电脑学习,2004(5):8-9.

    [3] 刘智,张金荣,王森.深入浅出讲解“Windows程序设计—VisualC++”课程[J].计算机时代,2012(9):57-59.

    【通联编辑:代影】

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/3/16 3:46:37