版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录TOC\o"1-4"\h\z\u1. 根本功能描述 12. 设计思路 13. 软件设计 33.1设计步骤 33.2界面设计 53.2.1图标设计 53.2.2对话框设计 6 菜单栏设计 73.3 关键功能的实现 73.3.1“翻开〞、“播放〞功能的实现 83.3.2“暂停/继续〞、“停止〞功能的实现 8 静音和音量滚动条的实现 8 播放列表功能的实现 84. 心得体会 95. 思考题 106. 附录 106.1调试过程 106.2测试结果 116.3关键源代码 117.参考文献 16多媒体视频播放器根本功能描述多媒体视频播放器作为用来播放视频和音频的软件,是当下信息时代中人们日常学习、办公、休闲娱乐都不可或缺的软件,也是Windows系统中必备的一个重要软件。在学习了Windows编程应用后,我们可以利用VC++6.0的MFC应用编程制作属于自己的多媒体视频播放器。多媒体视频播放器要实现对*.avi、*.mp3、*.wma、*.wmv等多种格式的多媒体文件进行播放。同时包含翻开、播放、暂停、继续、停止、快退快进、音量控制等根本功能和对播放列表的展开、保存、删除和清空等操作。其中可以通过按钮、滚动条和菜单等多种方式来实现相应控制操作。设计思路要利用VC++6.0创立多媒体播放器,我们必须先了解MFC编程,MFC是Microsoft公司提供的基于Win32API的C++类库集,它定义了一个标准的应用程序框架,借助这个框架,用户可以轻松地开发出标准的Windows应用程序。创立应用程序时,我们需要用到AppWizard、ClassWizard和各种控件。而在本次多媒体视频播放器的设计中,我们需要用到VC++6.0内部的ActiveX控件——WindowsMediaPlayer控件。WindowsMediaPlayer简称WMP,是一款Windows系统自带的播放器,支持通过插件增强功能。其控件作为本次课设的媒体控件可以满足要求。并且该控件是微软自带的免费控件,通常Windows系统中都有这个控件,所以选用这个控件方便设计出来的软件在各个电脑运行。要创立这个程序,首先是要建立相应的对话框和各种控件〔包括插入WindowsMediaPlayer控件〕以及图标、菜单栏等资源,然后为初始化设置对话框相应的样式等〔包括修改图标代码等〕,然后为相关控件建立相应的消息相应函数,通过对相应类中函数的调用实现相应的功能。主要包含播放列表操作模块和视频播放模块,又各自包含相应的功能函数。软件流程图如下:开开始初初始化添加文件到列表添加文件到列表播放操作列表操作播放操作列表操作播放播放清空删除保存展开清空删除保存展开暂停暂停?音量条静音停止快进快退音量条静音停止快进快退NOYESNOYES继续暂停继续暂停结结束图1程序整体框架图软件设计对于本次多媒体播放器,我们采用MFC对话框创立,然后插入WMP控件,借助类向导完成各个功能函数的编写。在WMP控件里,与多媒体播放器实现功能有关的类有:Cwmpplayer4,Cwmpcontrols,Cwmpmedia,Cwmpplaylist,Cwmpsettings五大类。其中播放器的一些根本的功能如播放、暂停、快进、快退等主要是调用CWMPControl和Cwmpplayer4类实现的;播放器中播放列表的实现主要是调用Cwmpplaylist类;对于音量的调节以及静音是调用Cwmpsettings和Cwmpplayer4类实现的。除了以上提到的功能的实现,还有翻开对话框是调用翻开对话框类,筛选文件是调用szFileFilter()文件过滤函数,获取文件名字和路径是GetFileName()和GetNextPathName()函数,音量滑动条Slinder是通过对CSliderCtrl类实现的。3.1设计步骤首先建立一个以自己名字命名的MFC工程,并在随后弹出的MFC应用程序向导中选择创立相应根本对话框。图2“新建〞对话框示意图然后在资源对话框中,先删去初始化的“确定〞和“取消〞,再单击鼠标右键选择“插入ActiveX控件〞,在跳出的对话框中选择“WindowsMediaPlayer〞。图3添加“WindowsMediaPlayer〞控件示意图随后在类向导中找到WMP控件对应的ID号,然后把控件的相关类都添加进来,让控件与对话框联系起来。图4“WindowsMediaPlayer〞控件类添加示意图然后再在类向导“MemberVariables〞中为控件关联相应的变量,命名为“m_player〞,类型选择为“Control〞。图5“SourceFile〞新增的文件这时我们已经可以看到在“SourceFile〞中新增了17个类相关文件,在相应头文件中也增加了17个头文件。其中最主要的类为Cwmpplayer4,Cwmpcontrols,Cwmpmedia,Cwmpplaylist,Cwmpsettings五大类。Cwmpplayer4类主要是关于对其他类的对象的调用以及根本的控件功能的实现,提供了与WindowsMediaPlayer控件进行交互的根本方法,其中局部成员函数还能够进一步获取得到其他相关类对象的实例;Cwmpcontrols类主要是对控件的更多的操作;Cwmpmedia类主要是对于媒体文件资源的一些操作;Cwmpplaylist类主要是关于播放列表的操作;Cwmpsettings类主要是对于媒体文件中的一些根本设置的操作。3.2界面设计3.2.1图标设计为了界面美观,图标采用自己下载的播放器图标,在“Source〞里插入“Icon〞来引入图标,ID为“IDI_ICON1〞。此处需要注意的是图标的格式须为“ico〞格式,然后要在相应位置将默认的图标ID改为所需的,即在图标相应变量定义的地方改ID号:m_hIcon=AfxGetApp()->LoadIcon(IDI_ICON1); //图标3.2.2对话框设计在资源界面中编辑对话框,添加各个控件并根据自己喜好排布和设置相应ID号,构建界面友好美观的对话框。然后在类向导中为相关控件建立相应消息响应映射,添加消息响应函数。表1控件ID以及对应响应函数表按钮ID控件Caption消息响应函数IDC_OPEN翻开OnOpen()IDC_PLAY播放OnPlay()IDC_PAUSE暂停/继续OnPause()IDC_STOP停止OnStop()IDC_FORWARD快进OnForward()IDC_BACKWARD快退OnBackward()IDC_MUTE静音/音量OnMute()IDC_EXIT退出OnExit()IDC_LIST播放列表OnList()IDC_SAVE保存列表OnSave()IDC_DELETE删除视频OnDelete()IDC_CLEAR清空列表OnClear()然后是参加一些关联变量的控件,之前参加了WMPlayer,还要参加“CSliderCtrl〞类型的滑块“Slider〞来当调节声音,参加“CListBox〞类型列表框“ListControl〞充当播放列表。表2控件ID以及关联变量表按钮ID控件Caption变量名称类型IDC_OCX1WMPlayerm_playerCWMPlayer4IDC_SLIDER2Sliderm_volumeCSliderCtrlIDC_LIST1ListControlm_listCListBox对话框的最后样式为:图6对话框的样式菜单栏设计在已经构建好对话框,完成控件的关联和相应消息响应函数的添加后,菜单栏的添加就相对简单多了,只需要将相应菜单项选择项的ID号与上述表中ID保持一致就能直接用菜单项选择项调用相应消息响应函数了。图7菜单栏的创立关键功能的实现关键功能的实现主要都是在相关控件的相应消息相应函数中添加相应的代码,从而实现所需要的功能。下面将讨论关键的功能函数,相应代码在附录中给出。3.3.1“翻开〞、“播放〞功能的实现“翻开〞按钮主要是实现了对翻开的文件进行过滤,主要使用了szFileFilter()函数。定义了能翻开的文件格式等。点击确定时,首先是获取文件路径,然后把文件路径传给播放列表中,列表在从文件路径中提取文件名来显示。而“播放〞按钮能够从列表中获取文件路径,然后把文件路径通过SetUrl()交给控件读取播放。同时定义了初始的音量大小。3.3.2“暂停/继续〞、“停止〞功能的实现“暂停/继续〞按钮是通过GetDlgItemText()函数获取按钮上的字符来判断是当按钮按下时是执行暂停还是继续播放,并通过SetDlgItemText()函数来改变按钮上的显示字符。其中暂停和继续播放这里是利用Cwmpcontrols类中的GetControls().pause()和GetControls().play()这两个函数来实现的。当按下暂停时视频停止播放,同时按钮显示“继续〞,点击“继续〞,那么继续播放视频并显示“暂停〞。而“停止〞功能在这里那么是直接利用了控件类中的close()函数来实现停止的。值得一提的是程序中的快进快退功能也是利用了Cwmpcontrols类中的fastForward()和fastReverse()函数来实现的。静音和音量滚动条的实现静音功能的实现与“暂停/继续〞功能类似,都是利用GetDlgItemText()和SetDlgItemText()函数来获取和改变按钮上的显示字符。所不同的是,静音功能的实现是调用了“CWMPSettings.cpp〞文件里的SetVolume()函数。初始时按钮显示“音量〞,按下后静音,音量滚动条也回到最低位置,按钮显示“静音〞,再次按下音量恢复,显示“音量〞。音量滚动条相比于前面几个功能的实现,要显得复杂很多,区别于其他命令按钮的,它是滑块,需要关联变量“m_volume〞,在“OnInitDialog()〞函数中已对滑块范围进行初始化——m_volume.SetRange(0,100);使音量变化范围为0~100,再调用嵌套函数m_player.GetSettings().SetVolume(m_volume.GetPos());来获取滑块位置并设置相应音量。播放列表功能的实现播放列表主要有“隐藏/展开〞、“保存列表〞、“删除选中视频〞、“清空列表〞这四个功能。这个列表的四个功能实现前提是在工程的文件夹里新建一个txt文档并命名为“list.txt〞。文档可以保存播放文件列表使在下次翻开时可自动的生成播放列表。展开列表和隐藏列表是通过SetWindowPos()函数对对话框的大小进行设置,让最右边的列表可以显示出来和被隐藏。保存列表是利用CFile类中的相应函数来创立文本:file.Open(".\\list.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::typeText);//创立文本再利用函数GetText()和WriteString()这两个函数把列表中的内容写入文档中去。删除选中的视频那么是通过如下代码来实现的:m_list.DeleteString(m_list.GetCurSel());//删除当前光标所选择的行清空列表直接利用Cwmpplaylist类中的ResetContent()函数来实现的。心得体会本次课程设计安排在学期末,比拟深入地考察了我们对MFC的运用及掌握。与让我们更进一步地了解到了Windows编程的实际应用,在开拓我们眼界的同时稳固了我们课上所学知识,也进一步锻炼了我们的自学能力和对Windows编程的实际运用能力。在开始了解到可视化编程的时候,我就特别地感兴趣,因为这较于之前所学的普通C和C++编程来得更为实际,给人一种实际感,让我觉得学的东西能用得上,而且感觉也很有高端的感觉。可视化编程能极大地调动我的学习积极性,所以在Windows编程的学习中投入了更多的精力和时间,也对编程语言的学习有了前所未有的兴趣和好奇。很遗憾的是在本次卷面考试中没有相关的大题来检验我们的所学成果,庆幸的是学校安排了更为直接,更为适宜课程设计的方法来考察我们的学习情况,对于编程语言这种课程来书,这种考查方式无疑是最正确的,实际的东西就要实践中去检验。本次课设我选择了最贴近我们生活所用的多媒体视频播放器的设计,这个课题使我产生了浓厚的兴趣,并开始很早就着手准备,可惜的是,开始遇到了一个难题,之后由于各种考试实验等耽误,所以被搁浅了,在最后几天才重新开始做,不过在真正自己编写的时候又遇到了各种问题,其中最严重的是在我自己和室友的电脑上,编译连接成功后,只要一运行就会崩溃,开始一直以为是软件编写过程中出了过失,花费了大量时间来调试和排错,但是并没有起到什么作用。后来意识到可能是软件和系统兼容性的问题,换到其他人的电脑上可以完美运行,不过由于之前消耗了大量时间,所以后面不得不放弃了开始原有的一些设计思路。总之呢,通过本次课程设计,自己学到了很多东西,不仅在对MFC应用程序的框架理解和相应创立上有了进一步提升,对自己的缺乏之处有了认识,也对程序的调试和检查有了更深入的掌握,也体会到了与他人沟通交流的重要性,更进一步加深了我对Windows编程的浓厚兴趣。很感谢学校和老师能提供这次的锻炼时机,让自己在即将结束的年尾有了更多的收获,对于新的一年有了更多的思考与展望。思考题控件自带的类和本程序中的类是如何共同作用的?答:控件自带的类不能直接调用,是通过在头文件中定义相应类的对象,然后通过对象名来调用相应函数,而本程序对话框的类是通过给控件添加消息响应函数。一般控件类有关的函数都是在对话框自身的函数和控件的消息响应函数中调用。以此实现控件自带类和本程序中的类的共同作用。说明程序中调用的控件函数的作用?答:各个控件的消息响应函数如下表所示:表3控件响应函数及其功能功能控件函数功能控件函数退出OnExit()音量条OnCustomdrawSlider2()翻开OnOpen()播放OnPlay()停止OnStop()暂停/继续OnPause()播放列表OnList()快进OnForward删除视频OnDelete()快退OnBackward()保存列表OnSave()静音/音量OnMute()清空列表OnClear()附录6.1调试过程1.有一些头文件没有添加,导致在ZJ_KESHE_WMPDlg.cpp中构建函数时,很多控件函数不能被识别,导致出现了很多错误。2.开始编写到一般后,程序一运行就停止工作,后来不断进行单步调试,仍然解决不了问题,最后发现是本人电脑上的软件的问题,换到其他人电脑上根本可以完美运行。3.开始音量条关联的变量没有初始化范围,然后起不到作用,后来添加了语句“m_volume.SetRange(0,100);〞。4.在设置时候直接删除了原来的默认图标,然后在代码中将其ID号直接改为所设置的图标,后来编译有问题,逐步在代码中查找后发现还需要将有一处对话框创立里包含的删去。6.2测试结果经过调试,程序能够正确运行,可以翻开*.avi,*.mp3,*.wma,*.wmv,*.mov格式的文件,能够实现播放,暂停,停止,快进,快退,音量控制,播放列表控制等多种功能,其中大局部还可以在菜单项选择项中执行。整体运行结果如下列图所示:图8运行结果图6.3关键源代码BOOLCZJ_KESHE_WMPDlg::OnInitDialog()中新参加了如下代码:{ flag=1; n=0;m_volume.SetRange(0,100);SetWindowPos(NULL,0,0,580,460,SWP_NOMOVE);//无相对移动m_list.SetHorizontalExtent(1000);CStdioFile*fsp=newCStdioFile(".\\list.txt",CFile::modeRead);//记住列表CStringstr; while(fsp->ReadString(str)) {m_list.AddString(str); }fsp->Close(); deletefsp;}//展开和隐藏列表voidCZJ_KESHE_WMPDlg::OnList()//展开列表{ flag=!flag; if(flag==1)SetWindowPos(NULL,0,0,580,460,SWP_NOMOVE); elseSetWindowPos(NULL,0,0,795,460,SWP_NOMOVE);}//翻开voidCZJ_KESHE_WMPDlg::OnOpen(){CharszFileFilter[]="媒体文件(*.avi,*.mp3,*.wma,*.wmv,*.mov)|*.avi;*.mp3;*.wma;*.wmv;*.mov|";CFileDialogdlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR,szFileFilter); POSITIONpos=dlg.GetStartPosition(); if(dlg.DoModal()==IDOK) //点击确定添加文件 { while(pos!=NULL) {m_PathName=dlg.GetNextPathName(pos);//获取文件路径m_list.AddString(m_PathName); //向列表添加文件路径 } }}//退出voidCZJ_KESHE_WMPDlg::OnExit(){OnOK();}//播放列表中双击播放选中文件voidCZJ_KESHE_WMPDlg::OnDblclkList1(){CStringstr;intindex=m_list.GetCurSel();m_list.GetText(index,str);m_player.SetUrl(str);m_PathName=str;}//保存列表voidCZJ_KESHE_WMPDlg::OnSave(){ file.Open(".\\list.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::typeText);//创立文本 for(inti=0;i<m_list.GetCount();i++) {CStringstrtemp;m_list.GetText(i,strtemp); //获得文本中的内容strtemp+="\n"; //需要换行file.WriteString(strtemp); //将获得内容写入列表 }file.Close();}voidCZJ_KESHE_WMPDlg::OnDelete()//从列表中删除选中视频{m_list.DeleteString(m_list.GetCurSel());//删除当前光标所选择的行OnSave(); //自动保存删除某一行后的播放列表}//删除列表voidCZJ_KESHE_WMPDlg::OnClear(){m_list.ResetContent();file.Open(".\\list.txt",CFile::modeCreate);}voidCZJ_KESHE_WMPDlg::OnPlay()//播放{m_player.SetUrl(m_PathName); //读取路径开始播放m_player.GetSettings().SetVolume(50);//初始音量}//暂停或继续voidCZJ_KESHE_WMPDlg::OnPause(){CStringstrtemp;GetDlgItemText(IDC_PAUSE,strtemp);//获取按钮上的字符 if(strtemp.Compare("暂停")==0)//假设显示“暂停〞,点击暂停,并显示“继续〞 {m_player.GetControls().pause();SetDlgItemText(IDC_PAUSE,"继续"); } if(strtemp.Compare("继续")==0)//实现从暂停点继续播放,并显示“暂停〞 {m_player.GetControls().play();Se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年新高一物理初升高衔接《力的合成与分解》含答案解析
- 显微镜用薄片切片机市场发展现状调查及供需格局分析预测报告
- 磁性编码器市场发展现状调查及供需格局分析预测报告
- 招聘咨询行业营销策略方案
- 工业包装容器用塑料瓶塞产品入市调查研究报告
- 小学绿书签课件
- 手压订书机办公用品市场发展现状调查及供需格局分析预测报告
- 胡演奏弓市场需求与消费特点分析
- 绘图用丁字尺市场发展现状调查及供需格局分析预测报告
- 家用垃圾焚化机产品入市调查研究报告
- 2023年中国铁路成都局集团有限公司招聘考试真题
- 2024保密教育测试题含答案(综合题)
- 广东省深圳市福田区红岭教育集团2024-2025学年七年级上学期期中考试数学试卷
- 2024-2025学年高考数学一轮复习讲义(新高考)第01讲数列的概念与简单表示法(知识+真题+10类高频考点)(精讲)(学生版+解析)
- 发电机组采购投标方案(技术方案)
- 新苏教版三年级上册科学全册知识点
- 硬件研发工程师生涯人物访谈报告
- 中班美术活动水(5篇)
- 2021年电力公司创一流工作会议讲话
- 毕业设计(论文)基于三菱PLC的交通灯模拟控制
- (完整版)offer模板范本.docx
评论
0/150
提交评论