1、1多媒体技术论文题目名称:基于 MFC 的多媒体播放器的设计与实现学 院: 计算机学院 专业班级: 计算机科学与技术四班 学 号: 姓 名: 指导教师: 完成日期: 2016 年 6 月 29 日2目录1.摘要 32.关键字 33.开发工具的介绍.34.基本功能的实现.35.设计思路.46.软件设计.57.结果展示158.心得体会163基于 MFC 的多媒体播放器的设计与实现计科四班 罗前指导老师 王勇智摘要:多媒体技术是现在信息技术领域发展的很迅速的一个技术,它的发展方向也很广泛,我们的生活几乎离不开多媒体,所以我设计了一个小程序,基于 MFC 的多媒体播放器的设计与实现,我认为这个小程序比
2、较实用而且并不是很复杂,而且可以通过它来进入多媒体的这道大门,进行更加深入的学习。关键字:MFC 多媒体 Mediaplayer ActiveX开发工具的介绍:Visual C+ 是 Microsoft 公司在 1998 年推出的基于 Windows 9X 和 Window NT 的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境,程序员可以利用该开发环境轻松地访问 C+源代码的编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。Visual C+ 不仅包括编译器,而且它还包括许多的有用的组件,通过这些组建的协同工作,可以在 Visual C+6.0 集成环境中完成创建源文件,编
3、辑资源,以及对源程序的编译,连接和调试等各项工作。MFC(Microsoft Foundation Class)是用来编写 Windows 应用程序的 c+类集,其中封装了大部分 Windows API 函数和 Windows 控件,使用 MFC 类库和 Visual C+提供的高度可视的应用程序开发工具,可使应用程序开发变得简单,提高代码的可靠性和可重用性。随着播放器性能的极大提高,程序中经常要播放一些音频,如果能够简单的插入一些音频并播放,将极大的缩短程序开发时间。本文就是基于 MFC 在 Visual C+环境中利用 windows media player 控件实现音频文件的播放。4A
4、ctiveX 控件是基于 COM 的可重用组件,主要用于插入 ActiveX 控件包容器或 Web 页,ActiveX 在外观上和使用上和普通控件一样,还提供属性页以支持在包容器的设计阶段对ActiveX 控件的属性进行可视化设计。基本功能的实现:这个播放器具有打开文件,播放,暂停,停止,全屏,退出,音量控制,上一曲,下一曲,快进,快退,静音等基本播放功能,并可以播放 MP3,avi,等格式的多媒体文件。同时还具有播放列表,并且可以在播放模式中选择顺序播放,循环播放,单曲播放三种方式。设计思路:该播放器分为十个模块,根据 ActiveMovie 控件实现他们各自相应的功能。打开模块:打开目标文
5、件。进度模块:显示目标状态。快进退模块:调节播放的快进和快退。播放模块:播放音频文件。暂停模块:暂停正在播放的音频文件。停止模块:结束当前正在播放的文件,但是播放器并不退出。全屏模块:实现文件的全屏播放。多媒体播放器打开模块播放模块循环模块快进退模块全屏模块停止模块暂停模块退出模块音量模块进度模块5退出模块:关闭该播放器。循环模块:实现播放列表中的全部文件的单曲、随机或顺序循环播放。音量模块:调节文件播放的音量大小和静音。使用 VC+6.0 的 AppWizard、ClassWizard 和其中的各种控件可以方便地建立各种应用程序。但是想要实现更高级更复杂的功能,就要借助丰富的 ActiveX
6、 控件资源。本实验计划使用 VC+6.0 自带的一个 ActiveX 控件ActiveMovieControl Object,来设计多媒体播放器。此多媒体具有一般的播放功能,能播放:*.mp3,*.wma,*.mdi,*.wav,*.avi,*.dat等文件,还有 Repeat 功能。软件设计:设计步骤:1、首先我们要注册控件:在 windows“运行”里写入:regsvr32 msdxm.ocx 然后单击确定。只有注册了控件,后面的实验才能顺利的做下去。2、然后打开 Visual C+ 6.0,在 Projects 下选择 MFC AppWizard(exe),并取名MediaPlayer,
7、然后建立基于对话框的应用程序。图 36图 4图 57图 6图 7 MFC AppWizard 生成的对话框83、打开 Resource View,选择其中的对话框 ,打开其中的主对话框,去掉对话框上的 “确定”按钮,保留“取消” ,将 Caption 改为“退出”。然后再在上面加上几个按钮,ID 和 Caption 分别为IDC_OPEN,打开;IDC_PLAY,播放;IDC_PAUSE,暂停;IDC_STOP,停止;IDC_CLOSE,退出;IDC_LOWER,;IDC_UPPER,+;IDC_FULLSCREEN,全屏;IDC_ABOUT,关于;IDC_LAST,上一曲;IDC_NEXT,
8、下一曲;IDC_FORWARD,快进;IDC_REVERSE,快退;最终如图 8 所示。图 8 播放器功能界面4、加入 ActiveMovieControl 控件。打开工程 增加到工程 -Components and Controls-Registered ActiveX Controls 对话框,选择其中的 ActiveMovieControl Object, Insert,OK 之后,会发现控件面板上多了一项 ActiveMovieControl Object,将它选中,直接放在对话框上,并拖成合适大小。最终效果如图 10 所示。9图 9 图 10图 10 最终界面效果5、为 Active
9、MovieControl 控件设置变量 m_ActiveMovie。点中它,按 Ctrl+W 打开 ClassWizard为它添加变量 m_ActiveMovie。10图 12 为 ActiveMovieControl 控件设置变量 m_ActiveMovie6、为程序添加消息处理函数。打开 ClassWizard,为各个按钮加入消息处理函数。在MediaPlayerDlg.cpp 文件里为各消息处理函数添加代码,部分代码如下:打开文件:void CMediaPlayerDlg:OnOpen() / TODO: Add your control notification handler cod
10、e herem_listCtrl.SetFocus();CString str;TCHAR szFilter = _T(“Mp3 File(*.mp3)|*.mp3|Wma File(*.wma)|*.wma|Video File(*.dat)|*.dat|Wave File(*.wav)|*.wav|AVI File(*.avi)|*.avi|Movie File(*.mov)|*.mov|Media File(*.mmm)|*.mmm|Mid File(*.mid;*,rmi)|*.mid;*.rmi|MPEG File(*.mpeg)|*.mpeg|All File(*.*)|*.*|“
11、);CFileDialog fileDlg(TRUE,NULL, NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);CString strFilePath;if (IDOK = fileDlg.DoModal()strFilePath = fileDlg.GetPathName();strFilePath.MakeUpper();m_player.SetUrl(strFilePath);m_media=static_cast(m_player.newMedia(strFilePath);m_list.appendItem(
12、m_media);m_listCtrl.InsertItem(count,m_media.GetName();m_listCtrl.SetItemText(count,1,_T(m_media.getItemInfo(“FileType“);m_listCtrl.SetItemText(count,2,_T(m_media.GetDurationString();m_listCtrl.SetItemText(count,3,_T(strFilePath);m_listCtrl.SetItemText(count+,4,_T(m_media.getItemInfo(“Duration“);POS
13、ITION pos;pos = m_listCtrl.GetFirstSelectedItemPosition();11IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos); m_listCtrl.SetItemState(IndexInFieldList,LVIS_SELECTED,LVIS_SELECTED);m_player.SetUrl(m_listCtrl.GetItemText(0,3);m_listCtrl.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);播放:void CMediaP
14、layerDlg:OnPlay() / TODO: Add your control notification handler code hereif(m_list.GetCount()(pNMHDR); / TODO: Add your control notification handler code hereNMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR;*pResult = 0;CString strName;if(-1 !=pNMListView-iItem)strName=m_listCtrl.GetItemText(pNMListVie
15、w-iItem,3);KillTimer(0);m_control.stop();m_player.SetUrl(strName);m_control.SetCurrentPosition(0.01);m_control.play();SetTimer(0,20,NULL);另外函数 OnTimer()是通过 ClassWizard(Ctrl+W)来添加的:图 13void CVedioPlayerDlg:OnTimer(UINT nIDEvent)double CurrentPos=m_ActiveMovie.GetCurrentPosition();15if(CurrentPos=0CDi
16、alog:OnTimer(nIDEvent);实验展示:16心得体会:通过这次多媒体播放器的设计,让我切身的感受到了计算机技术在多媒体中的应用是多么的广泛。同时,这也是理论知识的第一次实现,学习了两年的计算机知识,第一次真正的实现了一个小程序。虽然这个播放器可用性实在不佳,尽管能实现一些基本功能,但是在程序结构上还有很大方面的优化空间,但这次利用 Visual C+ 编写出的多媒体播放器让我很有成就感,虽然很多都是老师一步步教我们怎么去做的,三十当真正的把程序编写出来的时候就别提有多兴奋了。在工作和生活中多媒体技术和我们息息相关,在计算机技术不断普及的今天,对于我们来说,掌握多媒体技术是非常重
17、要的,这也是我们以后要学习的重点。这次课程设计论文试一次理论和实际相结合的过程,让我们明白理论知识往往是不够的,只有把所学的理论和实际相结合,才会提高自己的综合实际能力,在设计的过程中,我们常常会遇到很多问题,但是我们不能丧气,虽然有时候解决一个很小的问题也需要花费我们几个小时的时间,但是,编程往往是一个苦中有乐的过程,等到程序完成的那一刻,我们会很开心,我希望在以后的学习中,自己独立思考的能力会越来越强,这样,知识就会学的越来越多,我也会得到更多的锻炼。参考文献:1多媒体技术教程 机械工业出版社.20142C 程序设计(第三版) 清华大学出版社 .20133C+语言程序设计教程(第二版) 清华大学出版社.2014