《可视化编程课程设计基于MFC的多媒体播放器系统实现.doc》由会员分享,可在线阅读,更多相关《可视化编程课程设计基于MFC的多媒体播放器系统实现.doc(23页珍藏版)》请在三一办公上搜索。
1、学 号: 课 程 设 计课程名称可视化编程(VC)学 院计算机科学与技术学院专 业软件工程班 级姓 名指导教师岑 丽20132014学年 第2学期目 录1 课程设计要求12 系统的简单操作及功能说明12.1 系统简单操作12.2 功能说明23 所设计系统实现的各模块介绍33.1 流程图设计33.2 各模块介绍34 各模块源程序及对源程序主要部分的相应注释说明44.1 播放控制44.2 播放模式54.3 播放列表84.4 播放界面95 运行结果界面截图125.1 初始界面125.2 添加文件135.3 播放音频135.3 播放视频146 程序设计问题与总结156.1 设计中遇到的问题及相应的解决
2、方法和解决过程156.2 个人总结17参考文献181 课程设计要求学生姓名:_ 专业班级: 指导教师: 岑丽 工作单位:计算机科学与技术学院 题 目: 基于MFC的多媒体播放器系统实现1. 制作一个具有自己设计风格的媒体播放器。2. 要求能随机选取要播放的文件,实现前进,回退,暂停,循环播放,音量大小调节等基本功能。3. 要求能播放多种格式(至少四种或四种以上)的音频视频格式文件。 4. 可以实现其它附加功能(不在要求范围之内)5. 界面良好,功能完善2 系统的简单操作及功能说明 2.1 系统简单操作1 播放文件按钮 当用户想要打开某个播放文件时,只要选中播放列表中的需要播放的文件,再单击播放
3、文件按钮,该文件就会进行播放。再次单击播放文件按钮,则播放暂停;2 添加文件按钮当用户想添加播放文件到播放列表时,可以单击添加文件按钮,选定需要播放的文件的路径并打开,则选定的文件将被添加到播放列表中;3 列表/单一循环按钮当用户单击列表/单一循环按钮时,播放模式会切换到会转变到相应的模式下;4 上一首/下一首按钮当用户单击该按钮时,播放的文件相应变化;5 播放进度滑块滑块当文件正在进行播放时,用户可以通过滑动播放进度滑块进行对播放进程的控制,实现音频视频文件播放的快进和快退;6 音量调节滑块用户可以通过对音量调节滑块进行调节从而控制音量的大小;7 停止播放按钮单击该按钮,停止播放;8 退出程
4、序按钮当用户对播放器操作完成后可以通过单击退出程序按钮从播放器中退出,退出程序后播放列表将自动清空。2.2 功能说明 本次的课程设计是利用MFC类库,结合ActiveX控件资源开发一款简单而实用的多媒体播放软件Multimedia player播放器。Multimedia player播放器主要对常用音频及视频格式的文件实现以下功能:1 能随机选取要播放的音频或视频文件2 播放控制:播放/暂停、停止、退出,列表循环、单一循环等;3 显示播放进度及播放菜单;4 音量大小调节;5 播放多种格式(*.mp3,*.wma,*.wav,*.avi,*.mov)的音频视频文件;6 控制播放进度和播放模式。
5、3 所设计系统实现的各模块介绍3.1 流程图设计3.2 各模块介绍 本多媒体播放系统从界面上看分为四个部分:播放控制、播放模式、播放列表,播放界面。1 播放控制:主要包括媒体文件的播放、暂停、停止和程序的退出;2 播放模式:包括列表循环、单一播放、上下选择三种模式。用户通过对这三种模式的选择来控制音频视频的播放顺序;3 播放列表:播放列表记录了被用户添加的需要播放的文件,方便用户在添加文件之后可以迅速找到需要播放的文件;4 播放界面:音频的频谱和视频都会显示在播放界面上,播放界面还可以方便用户调整播放进度、音量大小,也能对音频和视频进行播放和暂停的控制。 4 各模块源程序及对源程序主要部分的相
6、应注释说明4.1 播放控制1 播放/暂停媒体文件void CMy2Dlg:OnPause() / TODO: Add your control notification handler code here/static bool i=true;if(i)i=false; m_wj.GetControls().pause();m_pause.SetWindowText(播放);KillTimer(TIMER1);elsei=true; m_wj.GetControls().play();m_pause.SetWindowText(暂停); SetTimer(TIMER1,100,0);2 停止播
7、放当文件还未播完时,单击停止按钮时,调用文件停止函数Onstop(),系统回到初始状态。具体如下:void CMy2Dlg:OnStop() / TODO: Add your control notification handler code hereKillTimer(TIMER1);m_wj.GetControls().stop();m_pause.SetWindowText(播放);i=false;3 退出系统void CMy2Dlg:OnClose() / TODO: Add your control notification handler code hereKillTimer(TI
8、MER1);DestroyWindow();4.2 播放模式1 循环播放功能 在函数OnState() 中输入以下代码。void CMy2Dlg:OnState() / TODO: Add your control notification handler code hereif(s)m_state.SetWindowText(单一循环);s=false;elsem_state.SetWindowText(列表循环);s=true;2 选择上/下一个文件void CMy2Dlg:OnReverse() / TODO: Add your control notification handler
9、code hereif(k)POSITION pos = m_list.GetFirstSelectedItemPosition();Item = m_list.GetNextSelectedItem(pos);m_list1.InsertItem(0,fileNameItem-1);m_list.SetItemText(0,1,NULL);if(Item!=0)pathNameItem-1.MakeUpper();m_wj.SetUrl(pathNameItem-1); m_wj.GetControls().play();if(Item=0)pathNameItem.MakeUpper();
10、m_wj.SetUrl(pathNameItem); m_wj.GetControls().play();k=false;if(Item0)Item-;if(Item=0)m_list1.InsertItem(0,fileName0);m_list.SetItemText(0,1,NULL);void CMy2Dlg:OnForward() / TODO: Add your control notification handler code hereif(k)POSITION pos = m_list.GetFirstSelectedItemPosition();Item = m_list.G
11、etNextSelectedItem(pos);m_list1.InsertItem(0,fileNameItem+1);m_list.SetItemText(0,1,NULL);pathNameItem+1.MakeUpper();m_wj.SetUrl(pathNameItem+1); m_wj.GetControls().play();k=false;if(Itemj-1)Item+;if(Item=j-1)m_list1.InsertItem(0,fileNameItem);m_list.SetItemText(0,1,NULL);4.3 播放列表添加文件到列表void CMy2Dlg
12、:OnOpen() /添加文件到列表/ TODO: Add your control notification handler code herem_slider.SetPos(0);char szFileFilter= Available File (*.*)|*.*|/五种音频视频格式类型Mp3 File(*.mp3)|*.mp3|/音频Wma File(*.wma)|*.wma|/音频Wave File(*.wav)|*.wav|/音频AVI File(*.avi)|*.avi|/视频Movie File(*.mov)|*.mov|;/视频/可以播放mp3、wma、avi、wav、mov
13、格式的文件CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);if(dlg.DoModal()=IDOK)CString PathName=dlg.GetPathName();pathNamej=dlg.GetPathName();fileNamej=dlg.GetFileName();PathName.MakeUpper();m_wj.SetUrl(PathName); int nItem=m_list.InsertItem(j,dlg.GetFileName(); m_list.SetItemText(nItem,1,
14、NULL);m_list1.InsertItem(0,dlg.GetFileName();m_list.SetItemText(0,1,NULL);j+;Item+;4.4 播放界面1 播放进度显示媒体文件在播放时的同时可以显示对应的进度,通过鼠标拖动滑块,实现快进快退功能。void CMy2Dlg:OnOutofmemorySlider2(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code here*pResult = 0;void CMy2Dlg:OnTimer(UINT n
15、IDEvent) / TODO: Add your message handler code here and/or call defaultstatic r=10,g=0,b=10;if(r250)r=r+10;else r=150;if(g250)g=g+15;else g=5;if(b250)b=b+20;else b=150;m_list1.SetTextColor(RGB(r,g,b);m_list1.Invalidate();/m_list1.UpdateWindow();static int t=0;double position=m_slider.GetPos();double
16、 len=m_wj.GetCurrentMedia().GetDuration(); double L=m_wj.GetControls().GetCurrentPosition();m_slider.SetPos(int(L*100/len);if(position=99&s) t+;if(t=2)if(k&m)POSITION pos = m_list.GetFirstSelectedItemPosition();Item = m_list.GetNextSelectedItem(pos);if(Item=j-1)Item=-1;m_list1.InsertItem(0,fileNameI
17、tem+1);m_list.SetItemText(0,1,NULL);pathNameItem+1.MakeUpper();m_wj.SetUrl(pathNameItem+1);if(Itemj-1)Item+;/if(Item=j-1)/Item=-1;m=false;t=0;m_wj.GetControls().play();CDialog:OnTimer(nIDEvent);2 音量调节 单击窗口水平滚动条,调节音量高低。void CMy2Dlg:OnOutofmemorySlider1(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add you
18、r control notification handler code here*pResult = 0;void CMy2Dlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) / TODO: Add your message handler code here and/or call defaultCSliderCtrl *Slider=(CSliderCtrl*) pScrollBar;if(Slider=&m_Slider)long position=m_Slider.GetPos(); m_wj.GetSettin
19、gs().SetVolume(position);if(Slider=&m_slider)double len=m_wj.GetCurrentMedia().GetDuration(); KillTimer(TIMER1); double position=m_slider.GetPos();m_wj.GetControls().SetCurrentPosition(position/100)*len); m_wj.GetControls().play();SetTimer(TIMER1,100,0);CDialog:OnHScroll(nSBCode, nPos, pScrollBar);5
20、 运行结果界面截图5.1 初始界面5.2 添加文件5.3 播放音频5.3 播放视频6 程序设计问题与总结6.1 设计中遇到的问题及相应的解决方法和解决过程1 第一次制作多媒体播放器,按钮的功能总是出现问题,写完的代码总是报错,无法实现按钮的功能。最后向同学请教,明白原因是改变了按钮的属性之后没有建立按钮的类向导,导致出现问题。解决的方法就是,在改变按钮的属性后立刻为按钮建立类向导,并在规定的位置填写实现按钮功能的代码。2 为系统添加背景图失败,在编译运行的时候会报错。这个问题是由于添加背景图的代码填写位置不对。原本我填这段代码的时候直接把代码放在了整个代码的最后,通过查找资料得知本段代码应该填
21、在OnPaint消息的else中,填写完成后重新编译运行,则相应的图片就会显示为播放器的背景图;3 待解决小问题一开始设置音量图标,通过界面不断的优化,觉得这个图标不合适,但是新的图标文件添加到Icon中,组建的时候总显示错误。6.2 个人总结1 关于课设这次课程设计我做了多媒体播放器的设计,除了前文所述也就是最终的那些功能,其实有想过实现音频文件歌词的同步播放功能,但是由于很多问题无法解决就放弃了。查阅过很多资料,上网,整天的呆在图书馆,不断的出错,不断的修改完善,虽然最终的系统功能可能有点简单,界面不够好看,但用自己做的小应用播放音乐视频,还是很开心,觉得自己这几天的付出也值了。2 感悟当
22、然,更重要的是,这次课设,确实锻炼了我的实际运用能力,加深了我对VC+这门课程的理解。我逐渐掌握了用MFC创建基于对话框的应用程序,同时了解了MCI相关知识。作为编程人员,能编代码容易,但要灵活调试程序并编译通过才是难点。VC的学习之路还很漫长,需要锻炼和学习的地方还很多但我会继续努力突破面临的种种困难。3 对老师说的话感谢老师在这学期对我的帮助。很感动。还记得第一次写的窗口代码(没运行成功)发到老师邮箱,老师居然回我邮件了,当时非常激动;不会忘记实验室就剩下两个学生了,老师还在指导;更不会忘记凌晨1:39的时候老师还给我们12级的各班班长发邮件通知VC大作业及实验要求.虽然只有短短半年,但老
23、师的教诲一定铭记在心,谢谢!参考文献图书馆文献:1 精锐创作组Visual C+.NET多媒体整合应用北京:人民邮电出版社.2001年2 Jeff Prosise(美)著MFC Windows程序设计(第二版):清华大学出版社.2007年3 宋坤,刘锐宁,李伟明. Visual C+技术大全北京:人民邮电出版社.2007年网站资料参考:本科课程论文评分标准班级学号姓名论文题目基于MFC的多媒体播放器系统实现评阅点评分标准(细则)分值给分功能及算法(40分)正确实现本程序所需全部功能,算法设计正确合理且有一定创意40分实现所需功能,算法正确30分基本实现所需功能15分有明显重大错误5分无法实现程序功能0分界面和操作性(20分)界面美观、合理,可操作性强20分界面合理,可操作15分界面尚可,基本可操作10分可操作较差5分程序可读、可维护性(15分)程序可读性好、逻辑清晰,程序完整,可维护性好,15分程序可读、可维护10分基本可读可维护5分逻辑混乱、不可读0分论文质量(25分)论文规范,行文流畅,层次清晰25分论文书写基本规范,文理较通畅20分结构较合理,层次较清楚,基本符合要求15分结构混乱,文不对题目,或者有明显抄袭现象5分总分 教师签名: