多媒体播放器 课程设计报告.docx
(设计标题)多媒体播放器用户签名: 开发成员: 孟凡林 开发时间: 201012-23 目录0引言31 工作计划31.1主要工作阶段划分31.2工作任务分工32需求分析32.1概述32.2用户分析42.3 约束条件42.4功能需求42.5用户界面需求43设计与实现43.1概述43.2详细设计53.1.1类的抽象及设计53.3 主要程序文件53.4开发环境以及部署环境要求63.5 主要源码64 测试104.1概述104.2 测试环境104.3测试计划104.4测试项目及结果105、工作总结115.1工作成果115.2过程分析125.3经验教训及其分析120引言现在人们娱乐的方式多种多样,已经有了很明显的变化,以前的户外运动现在已经在锐减,换而之的是网络游戏与网上聊天,而在同时听听音乐看看电影也成为了巨大的需求,所以很多多媒体播放软件出现了,形形色色各种都有,而我也赶下时髦,体验一下编写的过程,现在才发现这并不难,重要的是插件的插入,而其他的功能实现只需调用相应函数就行了!1 工作计划1.1主要工作阶段划分12月2021搜索相关资料,学习基础知识,大致设计框架12月2223考虑所用到的数据结构,函数及其作用,做较为细致的分析12月24日设计开始,仔细设计!12月26写报告(用表格或图表的形式列出你们小组各个阶段的时间进度大致安排)1.2工作任务分工阶段名称任务名称任务描述负责人协助人 1234全部编写软件孟凡林孟凡林2需求分析2.1概述1)到网上或图书馆查找相关系统函数实现相应的功能;2)使用MFC构建相应的用户界面2.2用户分析1)要求有稳定的性能,可实现要求的功能;2)拥有较好的界面,很方便人操作!2.3 约束条件(作为开发人员的,通常你的小组的工作时间和人员是一个明显约束;另外站在用户的角度,他们对你有什么约束要求,请从这两个角度进行陈述。)2.4功能需求能够打开文件放进播放列表,点击播放键使其播放,暂停键暂停,停止键停止,重播键重新播放,全屏键全屏播放,退出键退出程序,增大键增大音量,减小键减小音量!2.5用户界面需求3设计与实现3.1概述使用MFC构建相应的用户界面,实现相应的功能-能够打开文件放进播放列表,点击播放键使其播放,暂停键暂停,停止键停止,重播键重新播放,全屏键全屏播放,退出键退出程序,增大键增大音量,减小键减小音量,然后向其中加入各个函数实现相应的功能!3.2详细设计3.1.1类的抽象及设计1)控件active movie3类,主要用来播放各种类型的文件,其封装的各种成员函数使其成为MFC设计播放器必不可少的控件类;2)对话框基类cDlg类,及其派生类:(a)控件repeatbtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时再次播放打开的文件;(b)控件copenbtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时提供资源管理器供用户选择文件;(c)控件playbtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时播放打开的文件;(d)控件pausebtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时暂停播放打开的文件;(e)控件lowerbtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时减小播放音量;(f)控件upperbtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时增大播放音量(g)控件stopbtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时停止播放打开的文件;(h)控件fullscreen类,作为播放器打开文件的消息响应媒介,能够做到被点击时全屏播放打开的文件;至于其他的,当我们使用MFC编程时,会有很多封装的类供我们使用,所以就不一一列举了!3.3 主要程序文件1)头文件(为类加入相应的标准流,库):Activemovie3.h-控件;stdafx.h-框架构成;多媒体.h-多媒体的应用;多媒体Dlg.h-对话框;resourse.h-为多媒体.rc服务!2)源文件(完成各种类的定义与实现):Activemovie3.cpp-控件;stdafx.cpp-框架构成;多媒体.cpp-多媒体的应用;多媒体Dlg.cpp-对话框;多媒体.rc-运行过的效果!3.4开发环境以及部署环境要求1)Vs2010;2)3.5 主要源码1)打开文件void CMyDlg:OnOpenButton() / TODO: Add your control notification handler code hereCString strFilter = "Mp3 File(*.mp3)|*.mp3| " strFilter += "MPEG File(*.mpg;*.mpeg)|*.mpg;*.mpeg| " strFilter += "Wave File(*.wav)|*.wav| " strFilter += "AVI File(*.avi)|*.avi| " strFilter += "All File(*.*)|*.*| " /过滤适当的文件必须以0区分,以00结束,否则会出现参数不正确CFileDialog dlgOpen(TRUE,NULL,NULL,OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT,strFilter,this);/为CFileDialog定义对象DWORD MAXFILE = 2412; / 分配足够空间dlgOpen.m_ofn.nMaxFile = MAXFILE; / 设置buffer的大小CString strFileName; char* buf = new charMAXFILE; /分配空间dlgOpen.m_ofn.lpstrFile = buf; dlgOpen.m_ofn.lpstrFile0 = NULL; /赋值if(IDOK = dlgOpen.DoModal() POSITION pos = dlgOpen.GetStartPosition(); while (pos != NULL) strFileName = dlgOpen.GetNextPathName(pos); / 获取独立文件名m_list1.InsertString(m_list1.GetCount(),strFileName);/加至播放列表 delete buf; /释放空间2)播放文件void CMyDlg:OnPlayButton() / TODO: Add your control notification handler code herem_ActiveMovie.Run();/播放文件SetTimer(0,20,NULL);/设置定时器3)暂停播放void CMyDlg:OnPauseButton() / TODO: Add your control notification handler code herem_ActiveMovie.Pause();4停止播放void CMyDlg:OnStopButton() / TODO: Add your control notification handler code herem_ActiveMovie.Stop();/停止播放文件KillTimer(0);/关掉定时器5重复播放void CMyDlg:OnReapetButton() / TODO: Add your control notification handler code hereif(!isRepeat)isRepeat=TRUE; SetDlgItemText(IDC_STATIC2,"Status:Repeat"); elseisRepeat=FALSE;SetDlgItemText(IDC_STATIC2,"Status:Normal");6增大声音void CMyDlg:OnUpperButton() / TODO: Add your control notification handler code herelong Volume=m_ActiveMovie.GetVolume();m_ActiveMovie.Pause();m_ActiveMovie.SetVolume(Volume+100);m_ActiveMovie.Run();7减小声音void CMyDlg:OnLowerButton() / TODO: Add your control notification handler code herelong Volume=m_ActiveMovie.GetVolume();m_ActiveMovie.Pause();m_ActiveMovie.SetVolume(Volume-100);m_ActiveMovie.Run();8全屏播放void CMyDlg:OnFullButton() / TODO: Add your control notification handler code herem_ActiveMovie.Pause();m_ActiveMovie.SetFullScreenMode(true);m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED);m_ActiveMovie.Run();9关闭窗口void CMyDlg:OnCloseButton() / TODO: Add your control notification handler code herem_ActiveMovie.CloseWindow();²10退出void CMyDlg:OnClickedExitButton()/ TODO: Add your control notification handler code herePostQuitMessage(0);/;4 测试4.1概述1)打开文件(从曲库中找出歌曲加入列表中)2)播放,暂停,停止,全屏显示,停止,重播(active movie实现功能)4.2 测试环境1)2)vs20104.3测试计划1)打开文件2)播放及各种键的使用3)多次运行,检查稳定性4.4测试项目及结果1)打开文件2)5、工作总结5.1工作成果工作成果不是很明显, 因为我自作自受,霉运连连让我乱了阵脚,最后的一个大悲剧直接把我将死了!我没有编写出来一个成功的程序,以失败告终!我完了,Oh,myGod!5.2过程分析唉!因为自己眼光不够敏锐,没有选择正确的题目,一开始选择了邮件收发程序,当框架做好以后,开始实现各种功能了,才发现自己并不明白MAPI是怎么一回事,到处查也不是很会用,协议更没搞清楚,而且也不知道应该调用哪个系统函数来实现附件的添加,并且第三步由于协议问题也没头绪,联想到上学期做了好久也没搞出个好程序的经验,我就果断放弃了,改做文件编辑,结果又是因为搞不清怎么调出资源管理器搞的头皮发麻,最后又是悲剧的放弃了,现在一想都后悔啊!意志太不坚定了,就那么个小困难就把我给吓到了,唉!折腾了两天半已经是星期三的下午了,眼看期限快到了,我没办法,急得要命,没办法,这时候想起来老师曾经说过网上的媒体播放器很多,于是就到网上去搜了一个,结果一弄。唉!问题又出来了,我的机子里没装那个active movie控件,又搜了一下,找到插入控件的方法,使用运行命令插入了控件,但还是没有,又一搜,哎呀,真悲剧,2010版中找不到插入那个控件的方法。怎么办,怎么办?可急死我了,最后无奈到机房插入了那个控件,一点一点的加入了各个按钮,然后添加上了各种函数,谁知这时桌面突然显示,请输入用户名和密码,咋回事?唉!又悲剧了,钱用完了?Oh,myGod,不是吧?我还没保存那!然后,一翻衣兜,哎,没钱,怎么办?没办法,第二天,再次走入机房,这次聪明了,只弄了个插件,回到宿舍,因为高版本肯定能兼容低版本,所以继续用2010版的完善其它工作,最后大功告成,一运行,不行,参数数目不对。这时,我们班回来了一个人,说老师在为我们开了一教室2402,于是我下午就去问老师您,结果老师您一下子来了句抄的,一下子把我给弄晕了!哎呀,老师真厉害呀,一眼就看出来了,但是当我回来以后又运行还是无效的参数数目,并没有那个错误,还是不行啊!我彻底无奈了,仔细查找各种可能,但始终解决不了,最后只得放弃,听取命运的宣判,最后竟然还是让我找出来错误在哪,我要崩溃了,不过还是强忍着回到宿舍,继续我的寻错之旅!唉,加油!哈哈!找到了,原来使用VS2010之后再用VC+6.0会出现缺少文件,不能兼容。而其中有一段CString PathName= dlgOpen.GetPathName();PathName.MakeUpper();m_ActiveMovie.SetFileName(PathName);中有非法字符很难运行,所以会出现参数数目不正确! 5.3经验教训及其分析(1)真是不经历不知道,我现在才发现自己的基础是那么的薄弱,MFC的各种控件的使用方法都不是很熟,尤其是列表框,无论怎么学,使用什么方法,都弄不了,真是愁煞我也。本来在文件编辑放弃以后,做了多媒体播放器,我突然发现了调出资源管理器并选择的方法,但是因为listbox不太会用,不能使用它打开文件,所以只得放弃,今天一个上午的努力也白费了!以后一定要极爱按基础的扎实,为以后的编程提供巨大的方便!(2)以后做事要做好全局的规划,决定好了之后就不要轻易的改变,否则会误了大事,这让我想到了那个挖井的故事,这儿挖一点挖不出水就不挖了,那儿挖不出水也不挖了,最后挖了好多地方,还是没有挖出来一滴水,所以做什么事都是浅尝辄止的话,最后是成不了大事的!就比如说我这次,做了很多却一个也没做成,最后老师还不满意。还不如一直做第一个那,起码来说不会去抄啊!(3)还有,以后千万不能从网上直接拷代码了,或者说一旦复制就不能做丝毫的改动,否则会出现好多错误,只得一顶一点改回去!(4)通过这次课设,我学会了很多,应该说很熟练的掌握了MFC控件的添加与使用,也对使用MFC的各种控件驾轻就熟了,外也学会了一定的调试技巧,感觉收获颇丰,而遗憾的是自己未能独立的完成一个项目! 第 页