




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学可视化编程(vc)课程设计学 号: 课 程 设 计课程名称可视化编程(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 设计中遇到的问题及相应的解决方法和解决过程156.2 个人总结17参考文献181 课程设计要求学生姓名:_ 专业班级: 指导教师: 岑丽 工作单位:计算机科学与技术学院 题 目: 基于mfc的多媒体播放器系统实现1. 制作一个具有自己设计风格的媒体播放器。2. 要求能随机选取要播放的文件,实现前进,回退,暂停,循环播放,音量大小调节等基本功能。3. 要求能播放多种格式(至少四种或四种以上)的音频视频格式文件。 4. 可以实现其它附加功能(不在要求范围之内)5. 界面良好,功能完善2 系统的简单操作及功能说明 2.1 系统简单操作1 播放文件按钮 当用户想要打开某个播放文件时,只要选中播放列表中的需要播放的文件,再单击播放文件按钮,该文件就会进行播放。再次单击播放文件按钮,则播放暂停;2 添加文件按钮当用户想添加播放文件到播放列表时,可以单击添加文件按钮,选定需要播放的文件的路径并打开,则选定的文件将被添加到播放列表中;3 列表/单一循环按钮当用户单击列表/单一循环按钮时,播放模式会切换到会转变到相应的模式下;4 上一首/下一首按钮当用户单击该按钮时,播放的文件相应变化;5 播放进度滑块滑块当文件正在进行播放时,用户可以通过滑动播放进度滑块进行对播放进程的控制,实现音频视频文件播放的快进和快退;6 音量调节滑块用户可以通过对音量调节滑块进行调节从而控制音量的大小;7 停止播放按钮单击该按钮,停止播放;8 退出程序按钮当用户对播放器操作完成后可以通过单击退出程序按钮从播放器中退出,退出程序后播放列表将自动清空。2.2 功能说明 本次的课程设计是利用mfc类库,结合activex控件资源开发一款简单而实用的多媒体播放软件multimedia player播放器。multimedia player播放器主要对常用音频及视频格式的文件实现以下功能:1 能随机选取要播放的音频或视频文件2 播放控制:播放/暂停、停止、退出,列表循环、单一循环等;3 显示播放进度及播放菜单;4 音量大小调节;5 播放多种格式(*.mp3,*.wma,*.wav,*.avi,*.mov)的音频视频文件;6 控制播放进度和播放模式。3 所设计系统实现的各模块介绍3.1 流程图设计3.2 各模块介绍 本多媒体播放系统从界面上看分为四个部分:播放控制、播放模式、播放列表,播放界面。1 播放控制:主要包括媒体文件的播放、暂停、停止和程序的退出;2 播放模式:包括列表循环、单一播放、上下选择三种模式。用户通过对这三种模式的选择来控制音频视频的播放顺序;3 播放列表:播放列表记录了被用户添加的需要播放的文件,方便用户在添加文件之后可以迅速找到需要播放的文件;4 播放界面:音频的频谱和视频都会显示在播放界面上,播放界面还可以方便用户调整播放进度、音量大小,也能对音频和视频进行播放和暂停的控制。 4 各模块源程序及对源程序主要部分的相应注释说明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 停止播放当文件还未播完时,单击停止按钮时,调用文件停止函数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(timer1);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 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();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.getnextselecteditem(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: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格式的文件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,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 nidevent) / 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 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,filenameitem+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 your 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.getsettings().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 运行结果界面截图5.1 初始界面5.2 添加文件5.3 播放音频5.3 播放视频6 程序设计问题与总结6.1 设计中遇到的问题及相应的解决方法和解决过程1 第一次制作多媒体播放器,按钮的功能总是出现问题,写完的代码总是报错,无法实现按钮的功能。最后向同学请教,明白原因是改变了按钮的属性之后没有建立按钮的类向导,导致出现问题。解决的方法就是,在改变按钮的属性后立刻为按钮建立类向导,并在规定的位置填写实现按钮功能的代码。2 为系统添加背景图失败,在编译运行的时候会报错。这个问题是由于添加背景图的代码填写位置不对。原本我填这段代码的时候直接把代码放在了整个代码的最后,通过查找资料得知本段代码应该填在onpaint消息的else中,填写完成后重新编译运行,则相应的图片就会显示为播放器的背景图;3 待解决小问题一开始设置音量图标,通过界面不断的优化,觉得这个图标不合适,但是新的图标文件添加到icon中,组建的时候总显示错误。6.2 个人总结1 关于课设这次课程设计我做了多媒体播放器的设计,除了前文所述也就是最终的那些功能,其实有想过实现音频文件歌词的同步播放功能,但是由于很多问题无法解决就放弃了。查阅过很多资料,上网,整天的呆在图书馆,不断的出错,不断的修改完善,虽然最终的系统功能可能有点简单,界面不够好看,但用自己做的小应用播放音乐视频,还是很开心,觉得自己这几天的付出也值了。2 感悟当然,更重要的是,这次课设,确实锻炼了我的实际运用能力,加深了我对vc+这门课程的理解。我逐渐掌握了用mfc创建基于对话框的应用程序,同时了解了mci相关知识。作为编程人员,能编代码容易,但要灵活调试程序并编译通过才是难点。vc的学习之路还很漫长,需要锻炼和学习的地方还很多但我会继续努力突破面临的种种困难。3 对老师说的话感谢老师在这学期对我的帮助。很感动。还记得第一次写的窗口代码(没运行成功)发到老师邮箱,老师居然回我邮件了,当时非常激动;不会忘记实验室就剩下两个学生了,老师还在指导;更不会忘记凌晨1:39的时候老师还给我们12级的各
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度汽车典当借款合同合同解除生效时间
- 二零二五年度电信固移融合服务协议书规范范本
- 二零二五年度柑橘出口退税代理服务合同模板
- 二零二五年生态园区物业绿色服务合同
- 2025房地产营销策划与品牌推广一体化服务合同
- 二零二五年度植筋加固与检测一体化服务协议
- 2025版虚拟现实教育培训平台合作协议
- 2025版智慧城市股份公司设立股东综合服务协议书
- 2025版期货居间佣金分配合同书范本
- 2025版节能环保建筑材料代理销售合同范本
- 船舶公司内务管理制度
- 食品供应链内部管理制度
- 护理职业素养课件
- 2025年云南中考数学试卷真题解读及复习备考指导
- 数字身份认证伦理-洞察及研究
- 生态旅游承载力研究-洞察及研究
- 乡村振兴培训试题及答案
- DZ/T 0079-1993固体矿产勘查地质资料综合整理、综合研究规定
- T/SHPTA 026-2022塑料防水透气薄膜
- 冻伤急救护理
- 2025年四川甘孜州招聘康定市投资发展集团有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论