c++课程设计说明书(多媒体播放器)_第1页
c++课程设计说明书(多媒体播放器)_第2页
c++课程设计说明书(多媒体播放器)_第3页
c++课程设计说明书(多媒体播放器)_第4页
c++课程设计说明书(多媒体播放器)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学 号:0121414680512课程设计题目多媒体视频播放器学院理学院专业应用物理班级物理JD1401姓名陈玉成指导教师谢颂华2016年 6 月 24 日课程设计任务书学生姓名:陈玉成专业班级:物理JD1401指导教师:谢颂华工作单位:武汉理工大学理学院题目:多媒体视频播放器初始条件:计算机和vc开发环境要求完成的主要任务:1、技术要求(1)提出总体方案的设计思想和原理,选择使用的多媒体控件;绘制程序流程图和描述程序的功能。要求系统能通过菜单和按钮控制打开、播放、暂停、停止音频文件和视频文件,并能控制声音的大小和播放进度。(2 )创建工程,制作与用户交互性较好的应用程序界面。(3 )编程代码

2、,完成整体设计。要求能用菜单和播放条或按钮控制媒体的播放和声音。(4 )调试程序,达到所要求的功能。2、主要任务(1 )查阅资料,根据设计任务进行功能分析;(2)根据要求设计程序流程图;(3)熟悉多媒体编程和多媒体控件的使用,查阅资料和帮助文件进行程序代码编写;(4 )调试并完善程序,综合测试完成的系统;(5)撰写设计说明书,进行答辩。3、撰写课程设计说明书封面:设计题目,指导老师,班级,设计者姓名,设计者学号,日期 任务书目录正文:1、基本功能描述;2、设计思路;3、软件设计;4、结论与心得体会;5、思考题 附录:1、调试报告;2、测试结果;3、关键源代码成绩评定表时间安排:第1周:明确任务

3、,查阅资料,设计程序流程图;第2周:设计界面,编写代码,按要求的功能不断调试并完善程序;第3周:测试系统。按照要求撰写课程设计说明书。指导教师签名:系主任(或责任教师)签名:目录1 基本功能描述 12 设计思路 13 软件设计 23.1 设计步骤 23.2 界面设计 53.3 关键功能的实现 73.3.1 “打开”功能的实现 . 73.3.2 “播放”功能的实现 . 83.3.3 “暂停”、“停止”功能的实现. 83.3.4 “快进“、”快退“功能的实现. 83.3.5 音量、视频进度滑动条功能的实现 . 83.3.6 菜单“帮助”中“视频时长”功能的实现 . 104 结论与心得体会 105

4、思考题 116 附录 116.1 调试报告 116.1.1 调试一 . 116.1.2 调试二 . 126.1.3 调试三 . 126.2 测试结果 136.2.1 打开文件时的运行结果 . 136.2.2 文件正常播放 . 136.2.3 菜单项中 About 146.3 关键源代码 15武汉理工大学面向对象程序设计课程设计说明书多媒体视频播放器1基本功能描述多媒体播放器是一种用来播放视频和音频的软件,比较流行的有Real PlayeKWi ndows Media Player以及国产暴风影音等,能够播放 RM、RMVB、MP3、MPEG、DAT等多种 格式的视频文件 mp3、wma、mdi

5、、wav、avi、dat等格式的音频文件。使用VC+6.0强大的AppWizard、Class Wizard和其中的多种控件可以很方便地建 立各种应用程序。借助ActiveX控件资源和其他现有的控件资源,可以省去自己编程的复 杂过程,从而实现高级的功能。本次课程设计要使用VC+6.0内部的ActiveX控件一一Win dows Media Player控件,建立自己的多媒体播放器。该播放器能通过菜单和按钮控制打开、播放、暂停、停止、快进、快退音频文件和视频文件,并能控制声音的大小包括静音、最大音量等功能,且能通过滑块控制播放进度, 还附加查看视频文件总时长的功能。2设计思路基于VC+6.0制作

6、多媒体播放器,主要使用了 Windows Media Player控件和各种类 型按钮,控件 Windows Media Player完成了由其他控件加载的多媒体文件的解码, 以及完 成由其他控件提交的控制信息的响应。根据 Windows Media Player和各个按钮控件功能的特点,首先要在初始化中对 CWMPControl,CWMPSettings,CWMPPlaylist,CWMPMedia 等类的对象进行绑定和定义。 但是不首先定义这些类的对象也行,我们直接在需要使用这些类的成员函数时,用按件变 量点再点运算符就可以了。播放器的一些基本的功能如播放、暂停、静音、快进、快退等主要是调

7、用CWMPControl 和CWMPPlayer类中的成员函数来进行实现。对于打开按钮,需要调用通用文件对话框 类,调用GetFileName()获取文件名函数。音量滑动条 Slinder是通过对 CSliderCtrl类进行初始化,调用 m_volume中的 SetVolume ()函数来定义音量的 改变。m_schedule中的SetPos()来改变滑块位置, SetCurre ntPositio n()同步进度。基本思路流程如图 1所示。9开始初始化消息队列退出?Y关闭窗口J结束_U_*1 结束N 11E打开1r播放控制播放3软件设计3.1设计步骤打开VC+6.0,点击暂停停止快进快退静

8、音SB THUMBTRACKSB PAGEDOWN曰. 曰量* 进度SB PAGEUP图1VC+6.0视频播放器流程图新建”在 新建”窗口选择 工程”选项卡。由于程序是基于对话框的MFC应用程序,所以首先是建立基于对话框的工程,以“ChenYuCheng_DM为工程名, 然后点击确定”如图2所示。图2 新建”对话框示意图在点击 确定”后进入到了 “MFC应用程序向导一步骤1”的设置界面,选择 基本对话框”然后点击下一步图3“MFC应用程序向导一步骤 T示意图点击完成,之后在建立的对话框中,点击右键,选择插入ActiveX控件”在跳出的对话框中选择“Windows Media Player, ”

9、点击 确定”mChenYUChengDMTI12 1插入 ActiveX 控件ActiveX控件:倫定STSUpId CopyCtl ClassaSysColorCtrl class取消Tabular Data ControlTaskSymbol Class Toggle ActiveX ControlVideoRenderCtl ClassWindows Media PlayerWindows Store Remote Desktop ClientYunWebDetect Class性能监视举控制KS:C:Win d owssyste mJp.dll图4 添加“Windows Media P

10、laye控件示意图虽然已插入该控件,但该控件没有与工程中的对话框发生任何联系,所以要对控件进行变量关联,将该控件与对话框联系起来,并插入17个类。MFC ChWizardProject:CtienYUCheng UM11L.AChenYUChenq LControl IDs:The checked cIisbbs will be generated from Ihc ArtvcX Contral. Click on o dasE name to brawe ar elit its attributes*CantxlIDC MLDIAPLAYERlCV/MPCIuk:eil Collin i b

11、rCWMmayliat lCWMPPIaYliflCollEellMiAdd Class.FlLinns:CWftdUeccrlptidn:Hinder filr:|WMPPIaycrlhImplcrncntatinn lilc:IWMPPlayerd.cpp取梢图5“Windows Media Playei控件建立类向导示意图左键单击对话框中的中的“Windows Media Player ”控件,属性”设置为“IDC_MEDIAPLAYER ,右键单击 建立类向导”在对话框中选择“Member Variable选项 卡,单击 “ADD Variables,”命名为 “m_mediaplay

12、e,”设为控制 “Control型,单机 “0K图6变量命名示意图关联变量之后才算是真正的添加了该控件,可以发现在关联变量之后,控件工具栏多了 “Windows Media Player控件的选项,并且在 “Source Files中增加了 17个类,相应的头 文件也增加了 17个,其中最主要的类为 Cwmpplayer4, Cwmpcontrols,Cwmpmedia, Cwmpsett ings 四个大类。Cwmpplayer4类主要是关于对其他类的对象的调用以及基本的控件功能的实现,提供了与 Windows Media Player控件进行交互的基本方法,其中部分成员函数还能够进一步获

13、取得到其他相关类对象的实例;Cwmpcontrols类主要是对控件的更多的操作;Cwmpmedia 类主要是对于媒体文件资源的一些操作;Cwmpsett ings类主要是对于媒体文件中的一些基本设置的操作。3.2界面设计首先是打开按钮,用于媒体文件的打开;然后依次是播放、暂停、停止、快进、快退、 静音、退出按钮,以及视频进度滑块和音量滑块条 Sli nder控件。对控件主要进行变量的 关联,以及ID的修改,对于普通按钮进行ID修改,结果如下下表1和表2所示。表1控件ID以及关联变量表控件 Caption按钮ID关联变量类型关联变量名WMPlayerID MEDIAPLAYERCWMPlayer

14、4m mediaplayerSli nderrIDC SCHEDULE1 CSliderCtrlm scheduleSli nderrIDC VOLUME:CSliderCtrlm volume表2 控件ID以及对应响应函数表控件 Caption按钮ID消息响应函数打开ID OPENOn Ope n()播放ID PLAYOn Play()暂停ID PAUSEOn Pause()停止ID STOPOn Stop()快进ID FASTFORWARDOnF astforward()快退ID FASTREVERSEOnF astreverse()静音ID no VOLUDE;OnnoV OLUDE()

15、退出ID EXITOn Exit()表1和表2所列出的是对应控件的对象的关联,除此之外还需要对对话框类进行消息响应函数的关联,还需要用到WM_HSCROLL消息响应函数以及 OnHScroll()函数,控制将对话框类进行滑块消息响应的关联并书写图7“WM HSCROLL消息函数示意图经过控件添加、关联和位置修改、ID修改,最终得到各个控件分布后的界面。 另外还 要加入菜单“MEN”,菜单的添加相对较简单。在“Resource Fil中添加“MEN”,属性为“IDR_MENU1,在“MEN”将按钮的ID填入到相应的“ MEN”选项中,但是菜单并未与对话窗口有实质性联系,需要将菜单加入到“IDD_

16、CHENYUCHENG_DMT_DlALOG 中来,在 “IDD_CHENYUCHENG_DMT_DlALOG窗口空白右键单击,选中菜单“IDR_MENU1,这样便完成了对菜单的加载。对于 帮助”菜单我加入了 视频总时长”和“About项,用作提示。图8界面运行效果图多媒体播放器”,并有菜单、编译运行程序后得到了初步的界面效果图,显示标题为 八个按扭以及进度与音量的滑块,如上图 9所示。3.3关键功能的实现3.3.1 “打开”功能的实现按钮”打开”主要是实现打开文件并且取出文件路径。将文件路径赋给变量 m_strFilePathName并暂时储存起来。void CChe nY uChe ng_

17、DMTDIg:O nOpe n()CFileDialog dlg(TRUE,_T(avi),_T(*.avi),OFN_HIDEREADONL Y|OFN_OVERWRITEPROMPT, _T(*.rmvb)|*.rmvb|(*.mpg)|*.mpg|(*.avi)|*.avi|(* .*)|*.*|);if (dlg.DoModal()=IDOK) m_strFilePathName=dlg.GetPathName();3.3.2 “播放”功能的实现通过调用m_mediaplayer.SetUrl(函数来实现播放功能,也可以通过调用play()函数来实现。void CChe nY uChe

18、 ng_DMTDIg:O nPlay()if (m_strFilePathName!=) m_mediaplayer.SetUrl(m_strFilePathName);3.3.3 “暂停”、“停止”功能的实现void CChe nY uChe ng_DMTDIg:O nPause()m_mediaplayer.GetC on trols().pause();通过调用GetControls()获得CWMPControls类中的成员函数 pause(来实现暂停功能。而停止功能与暂停一样,只须调用stop()函数来实现。3.3.4 “快进”、“快退”功能的实现void CChe nY uChe n

19、g_DMTDIg:O nFastforward()m_mediaplayer.GetCo ntrols().fastForward();与暂停停止一样,也是在CWMPControls类中有fastForward()和fastReverse(函数分别用来实现快进、”快退功能。3.3.5音量、视频进度滑动条功能的实现首先在视图窗口类的On I ni tDialog()函数中实现音量滑块的初始化,如下示:m_volume.SetRa nge(0,100);m_volume.SetPos(50);武汉理工大学面向对象程序设计课程设计说明书而视频进度滑块的初始化放在 OnH Scroll()函数中实现。

20、void CChe nY uChe ng_DMTDIg:O nHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) m_time=(i nt)m_mediaplayer.GetCurre ntMedia().GetDuratio n();m_schedule.SetRa nge(O,m_time); 初始化视频进度滑块int NewPos;if(CSIiderCtrl*)pScrollBar=&m _schedule)switch( nSBCode)case SB_THUMBTRACK:m_schedule.SetPos (n Pos

21、);m_mediaplayer.GetC on trols().SetCurre ntPositi on( (double )n Pos); break;case SB_PAGEDOWN:NewPos=m_schedule.GetPos();m_mediaplayer.GetC on trols().SetCurre ntPositi on( (double)NewPos); break;case SB_PAGEUP:NewPos=m_schedule.GetPos();m_mediaplayer.GetC on trols().SetCurre ntPositi on( (double)Ne

22、wPos); break;if(CSIiderCtrl*)pScrollBar=&m _volume)switch( nSBCode)case SB_THUMBTRACK:m_volume.SetPos( nPos);m_mediaplayer.GetSett in gs().SetV olume(l ong)n Pos);break;case SB_PAGEDOWN:NewPos=m_volume.GetPos();m_mediaplayer.GetSett in gs().SetV olume(l on g)NewPos);break;case SB_PAGEUP:NewPos=m_vol

23、ume.GetPos();m_mediaplayer.GetSett in gs().SetV olume(l on g)NewPos);break;CDialog:OnHScroll(nSBCode, nPos, pScrollBar);音量与视频进度的控制主要是 SB_THUMBTRACK、SB_PAGEDOWN、SB_PAGEUP,三个消息响应即移动滑块、单击滑块右边滑条、单击滑块左边滑条的消息响应来实现音量 与视频进度的控制。336菜单“帮助”中“视频时长”功能的实现void CChe nY uChe ng_DMTDIg:O nAbout()CStri ng strtime;strti

24、me.Format(%f,m_mediaplayer.GetCurre ntMedia().GetDuratio n();MessageBox(strtime,视频时长(s);4结论与心得体会经过这次课程设计,让我对于MFC编程的方法有了进一步的认识。开始看到五个选题时,我第一眼就确定了感兴趣的的题目 一一多媒体播放器,虽学vc+不久,但还是希望 这次课设能做出一个漂亮的小东西,一个播放器并且还具有播放视频音频的真实效果,其 他的功能也都要实现,就觉得这个课设应该比较难,因为从没接触过这种实用性很强的软 件,而且还这么高大尚。接触题目开始做后,我花了大量时间去了解第一步怎么做,分别查找了各个控

25、件基本用法功能,最后选用了 Windows Media Player控件,因为我vc中只能找到这个与视频有 关的控件,于是在网上查了一些关于 Windows Media Player控件的资料,结果按照网上说 的方法来根本无法实现,因为网上都说要先插入17个Windows Media Player控件相关的类,但是我vc却不照网上那样实现,所以在头两天是在摸索中,耗费了很多时间,最后我 先不管第一步,直接插入控件,然后发现关联变量时会有提示要插入17个类,点确定就行,问题就这么解决了。我结合了自己在网上搜索的资料,做好了整个多媒体播放器的整体设计,确定了软件 的框架、主要构件以及构件之间的关联

26、,而后由总体设计逐渐深入完成软件的详细设计和 开发过程。编写代码更加有条理,才会更加符合软件工程的标准。整个程序设计我做了两 天,直到检查我都还在编写代码,每天熬夜到 1点多,也学会了不少东西。最后,终于做完了播放器,实现了设置的功能,感觉整个过程完全不像老师所说的 视 频播放器最简单”,反而感觉是最难的,虽然很多代码现成的,但是关键是项目繁多, 加起 来很麻烦,琐碎。但最后感觉还是很快乐,眼看着自己设定的一个个按钮都实现了功能,确实是一种很大的快乐,汗水也是值得的。5思考题1)控件自带的类和本程序中的类是如何共同作用的?答:控件自带的的类肯定会在对话框的主程序中被调用,那么就要在主程序中#i

27、nelude入对应类的头文件。对需要用到的类生成对应的对象以实现类中函数的使用。在完成控件自带类的函数在程序中的使用之后,还需要调用对话框自身的函数,比如消息及消息响应 函数等函数,以及各控件对应的消息响应函数,并且初始化函数等也需要做一些改动,添 加一些与控件类有关的函数或者定义一些变量,如此便可以实现控件自带类和本程序中的 类的共同作用。2)说明程序中调用的控件函数的作用?各个控件有不同的函数与之对应,从而分别实现不同功能,具体的函数与功能见下表 4所示。表3调用的控件函数的作用功能控件函数功能控件函数打开GetPathName()快进fastForward()播放SetUrl ()快退f

28、astReverse()暂停pause()静音SetVolume(O)停止stop()曰量SetVolume()退出close()进度SetCurre ntPositio n()6附录6.1调试报告6.1.1 调试一一运行时错误指明如下如图所示:void CChenYuCheng_DMTDlg:OnPause 0%/ TODO: Add your control notification handler code here| m mediaplayer. GetControls(J. pause():图9调试一错误提示错误提示为:use of undefined type CWMPContro

29、ls。在这行代码中,我用控件变量m_mediaplayer调用GetControls()函数来获得CWMPControls类的对象以调用该的成员函 数pause(函数,根据错误提示可知,我这行代码是写在视图类中,调用pause(属于类外调 用,但是该类不认识 CWMPControls类,所以要在视图类的最前面要加个头文件 #include wmpco ntrols.h。6.1.2 调试二运行时错误指明如下如图所示:void CChenYuCheng_DMTDlg;:OnnoVOLUDE()/ / TOM: Add yutlr tuntiol not licat Lun handlrt cude

30、 hett? mnedisplayer.SetVolume(0); rr_volume. SetPos (0):_图10调试二错误提示错误提示:SetVolume : is not a member of CWMPPIayer4。解决方法,将该行代码写 成 m_mediaplayer.GetSettings().SetVlume(0)即可,因为 SetVolume(O)不在 CWMPPlayer4 类 中,而是在CWMPSettings类,所以要通过GetSettings(作中间过度函数。6.1.3调试三运行时结果指明如下如图所示:图11调试三错误提示这严格说不算错误,只是运行时视频进度滑块无

31、法控制视频进度,只要一移运滑块就 回到视频开始的地方。经排查发现,原来是我滑块初始化为(0,0),因为我初始化进度滑 块代码加在On I ni tDialog()中,这个函数在我打开文件时就已经执行了,也就是 m_time=(int)m_mediaplayer.GetCurrentMedia().GetDuration()中,m_time 变量在没有指定打 开文件是就已经有值了,即0,所以再初始化滑块是就被置成 0,也就无法完成控制视频进 度的功能。解决方法:只要将初始化代码加到消息响应函数OnH Scroll()中即可。6.2测试结果6.2.1打开文件时的运行结果图12打开文件运行结果622

32、文件正常播放18图13正常播放运行结果623菜单项中AboutAb outThis is a Media Player rviaker;匚 KenYuChengAll rights reserved copy 201 657:打幵|播和|.惴进|快退暂怡 |悟止 |音里Jtw 1斟 I F图14 About显示结果6.3关键源代码void CChenYuCheng_DMTDIg:OnOpen() / 打开文件/ TODO: Add your con trol no tificati on han dler code here打开文件格式CFileDialog dlg(TRUE,_T(avi),

33、_T(*.avi), OFN_HIDEREADONL Y|OFN_OVERWRITEPROMPT, _T(*.rmvb)|*.rmvb|(*.mpg)|*.mpg|(*.avi)|*.avi|(* .*)|*.*|); /if (dlg.DoModal()=IDOK) m_strFilePathName=dlg.GetPathName(); / 获得文件路径void CChenYuCheng_DMTDIg:OnPlay() / 播放文件/ TODO: Add your con trol no tificati on han dler code hereif (m_strFilePathName

34、!=) m_mediaplayer.SetUrl(m_strFilePathName);void CChenYuCheng_DMTDIg:OnPause()/ 暂停/ TODO: Add your con trol no tificati on han dler code here m_mediaplayer.GetC on trols().pause();void CChenYuCheng_DMTDIg:OnStop()/ 停止/ TODO: Add your con trol no tificati on han dler code here m_mediaplayer.GetC on t

35、rols().stop();void CChe nY uChe ng_DMTDIg:O nExit()/ 退出/ TODO: Add your con trol no tificati on han dler code here m_mediaplayer.close();void CChe nY uChe ng_DMTDIg:O nFastforward() / 快进/ TODO: Add your con trol no tificati on han dler code here m_mediapIayer.GetCo ntrols().fastForward();void CChenY

36、uCheng_DMTDIg:OnFastreverse() / 快退/ TODO: Add your con trol no tificati on han dler code herem_mediaplayer.GetCo ntrols().fastReverse();void CChe nY uChe ng_DMTDIg:O nH Scroll(UINT nSBCode, UINT n Pos, CScrollBar* pScrollBar) /频进度音量滑块消息响应/ TODO: Add your message han dler code here an d/or call defau

37、lt m_time=(i nt)m_mediaplayer.GetCurre ntMedia().GetDuratio n(); m_schedule.SetRa nge(0,m_time);int NewPos;if(CSIiderCtrl*)pScrollBar=&m _schedule)switch( nSBCode)case SB_THUMBTRACK:m_schedule.SetPos (n Pos);m_mediaplayer.GetC on trols().SetCurre ntPositi on( (double )n Pos); m_time=m_mediaplayer.Ge

38、tCurre ntMedia().GetDuratio n();UpdateData(FALSE);break;case SB_PAGEDOWN:NewPos=m_schedule.GetPos();m_mediaplayer.GetC on trols().SetCurre ntPositi on( (double)NewPos); m_time=m_mediaplayer.GetCurre ntMedia().GetDuratio n();UpdateData(FALSE);break;case SB_PAGEUP:NewPos=m_schedule.GetPos();m_mediapla

39、yer.GetC on trols().SetCurre ntPositi on( (double)NewPos); m_time=m_mediaplayer.GetCurre ntMedia().GetDuratio n();UpdateData(FALSE);break;if(CSIiderCtrl*)pScrollBar=&m _volume)switch( nSBCode)case SB_THUMBTRACK:m_volume.SetPos( nPos);m_mediaplayer.GetSett in gs().SetV olume(l ong)n Pos);break;case S

40、B_PAGEDOWN:NewPos=m_volume.GetPos();m_mediaplayer.GetSett in gs().SetV olume(l on g)NewPos);break;case SB_PAGEUP:NewPos=m_volume.GetPos();m_mediaplayer.GetSett in gs().SetV olume(l on g)NewPos); break;CDialog:O nH Scroll( nSBCode, n Pos, pScrollBar);void CChe nY uChe ng_DMTDIg:O nn oVOLUDE() / 静音/ TODO: Add you

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论