版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录1.基本功能描述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 多媒体视频播放器1. 基本功能描述多媒体视频播放器作为用来播放视频和音频的软件,是当下信息时代中人们日常学习、办公、休闲娱乐都不可或缺的软件,也是Windows系统中必备的一个重要软
2、件。在学习了Windows编程应用后,我们可以利用VC+6.0 的MFC应用编程制作属于自己的多媒体视频播放器。多媒体视频播放器要实现对*.avi、*.mp3、*.wma、*.wmv等多种格式的多媒体文件进行播放。同时包含打开、播放、暂停、继续、停止、快退快进、音量控制等基本功能和对播放列表的展开、保存、删除和清空等操作。其中可以通过按钮、滚动条和菜单等多种方式来实现相应控制操作。 2. 设计思路要利用VC+6.0创建多媒体播放器,我们必须先了解MFC编程,MFC是Microsoft公司提供的基于Win32API的C+类库集,它定义了一个标准的应用程序框架,借助这个框架,用户可以轻松地开发出标
3、准的Windows应用程序。创建应用程序时,我们需要用到AppWizard、Class Wizard和各种控件。而在本次多媒体视频播放器的设计中,我们需要用到VC+6.0内部的ActiveX控件Windows Media Player控件。Windows Media Player简称WMP,是一款Windows系统自带的播放器,支持通过插件增强功能。其控件作为本次课设的媒体控件可以满足要求。并且该控件是微软自带的免费控件,通常Windows系统中都有这个控件,所以选用这个控件方便设计出来的软件在各个电脑运行。要创建这个程序,首先是要建立相应的对话框和各种控件(包括插入Windows Media
4、 Player控件)以及图标、菜单栏等资源,然后为初始化设置对话框相应的样式等(包括修改图标代码等),然后为相关控件建立相应的消息相应函数,通过对相应类中函数的调用实现相应的功能。主要包含播放列表操作模块和视频播放模块,又各自包含相应的功能函数。软件流程图如下:开 始初 始 化添加文件到列表播放操作列表操作播放清空删除保存展开暂停?音量条静音停止快进快退NOYES继续暂停结 束图1 程序整体框架图3. 软件设计对于本次多媒体播放器,我们采用MFC对话框创建,然后插入WMP控件,借助类向导完成各个功能函数的编写。在WMP控件里,与多媒体播放器实现功能有关的类有:Cwmpplayer4,Cwmpc
5、ontrols,Cwmpmedia,Cwmpplaylist,Cwmpsettings 五大类。其中播放器的一些基本的功能如播放、暂停、快进、快退等主要是调用CWMPControl和Cwmpplayer4类实现的;播放器中播放列表的实现主要是调用Cwmpplaylist类;对于音量的调节以及静音是调用Cwmpsettings和Cwmpplayer4类实现的。除了以上提到的功能的实现,还有打开对话框是调用打开对话框类,筛选文件是调用szFileFilter()文件过滤函数,获取文件名字和路径是GetFileName()和GetNextPathName()函数,音量滑动条Slinder是通过对CS
6、liderCtrl类实现的。3.1设计步骤首先建立一个以自己名字命名的MFC工程,并在随后弹出的MFC应用程序向导中选择创建相应基本对话框。图2“新建”对话框示意图然后在资源对话框中,先删去初始化的“确定”和“取消”, 再单击鼠标右键选择“插入 ActiveX 控件”,在跳出的对话框中选择“Windows Media Player”。图3添加“Windows Media Player”控件示意图随后在类向导中找到WMP控件对应的ID号,然后把控件的相关类都添加进来,让控件与对话框联系起来。图4“Windows Media Player”控件类添加示意图然后再在类向导“Member Variab
7、les”中为控件关联相应的变量,命名为“m_player”,类型选择为“Control”。 图5“Source File”新增的文件这时我们已经可以看到在“Source File”中新增了17个类相关文件,在相应头文件中也增加了17个头文件。其中最主要的类为 Cwmpplayer4,Cwmpcontrols,Cwmpmedia,Cwmpplaylist,Cwmpsettings五大类。Cwmpplayer4类主要是关于对其他类的对象的调用以及基本的控件功能的实现,提供了与Windows Media Player控件进行交互的基本方法,其中部分成员函数还能够进一步获取得到其他相关类对象的实例;C
8、wmpcontrols类主要是对控件的更多的操作;Cwmpmedia类主要是对于媒体文件资源的一些操作;Cwmpplaylist类主要是关于播放列表的操作;Cwmpsettings类主要是对于媒体文件中的一些基本设置的操作。 3.2界面设计3.2.1 图标设计为了界面美观,图标采用自己下载的播放器图标,在“Source”里插入“Icon”来引入图标,ID为“IDI_ICON1”。此处需要注意的是图标的格式须为“ico”格式,然后要在相应位置将默认的图标ID改为所需的,即在图标相应变量定义的地方改ID号:m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
9、/图标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()
10、IDC_LIST播放列表OnList()IDC_SAVE保存列表OnSave()IDC_DELETE删除视频OnDelete()IDC_CLEAR清空列表OnClear()然后是加入一些关联变量的控件,之前加入了WMPlayer,还要加入“CSliderCtrl”类型的滑块“Slider”来当调节声音,加入“CListBox”类型列表框 “List Control”充当播放列表。表2控件 ID 以及关联变量表按钮ID控件 Caption变量名称类型IDC_OCX1WMPlayerm_playerCWMPlayer4IDC_SLIDER2Sliderm_volumeCSliderCtrlIDC_
11、LIST1List Controlm_listCListBox对话框的最后样式为:图6对话框的样式3.2.3 菜单栏设计在已经构建好对话框,完成控件的关联和相应消息响应函数的添加后,菜单栏的添加就相对简单多了,只需要将相应菜单选项的ID号与上述表中ID保持一致就能直接用菜单选项调用相应消息响应函数了。图7菜单栏的创建3.3 关键功能的实现关键功能的实现主要都是在相关控件的相应消息相应函数中添加相应的代码,从而实现所需要的功能。下面将讨论关键的功能函数,相应代码在附录中给出。3.3.1 “打开”、“播放”功能的实现“打开”按钮主要是实现了对打开的文件进行过滤,主要使用了szFileFilter(
12、)函数。定义了能打开的文件格式等。点击确定时,首先是获取文件路径,然后把文件路径传给播放列表中,列表在从文件路径中提取文件名来显示。而“播放”按钮能够从列表中获取文件路径,然后把文件路径通过SetUrl()交给控件读取播放。同时定义了初始的音量大小。3.3.2 “暂停/继续”、“停止”功能的实现“暂停/继续”按钮是通过GetDlgItemText()函数获取按钮上的字符来判断是当按钮按下时是执行暂停还是继续播放,并通过SetDlgItemText()函数来改变按钮上的显示字符。其中暂停和继续播放这里是利用Cwmpcontrols类中的GetControls().pause()和GetContr
13、ols().play()这两个函数来实现的。当按下暂停时视频停止播放,同时按钮显示“继续”,点击“继续”,则继续播放视频并显示“暂停”。而“停止”功能在这里则是直接利用了控件类中的close()函数来实现停止的。值得一提的是程序中的快进快退功能也是利用了Cwmpcontrols类中的fastForward()和fastReverse()函数来实现的。3.3.3 静音和音量滚动条的实现静音功能的实现与“暂停/继续”功能类似,都是利用GetDlgItemText()和SetDlgItemText()函数来获取和改变按钮上的显示字符。所不同的是,静音功能的实现是调用了“CWMPSettings.cp
14、p”文件里的SetVolume()函数。初始时按钮显示“音量”,按下后静音,音量滚动条也回到最低位置,按钮显示“静音”,再次按下音量恢复,显示“音量”。音量滚动条相比于前面几个功能的实现,要显得复杂很多,区别于其他命令按钮的,它是滑块,需要关联变量“m_volume”, 在“OnInitDialog()”函数中已对滑块范围进行初始化m_volume.SetRange(0,100);使音量变化范围为0100,再调用嵌套函数m_player.GetSettings().SetVolume(m_volume.GetPos();来获取滑块位置并设置相应音量。3.3.4 播放列表功能的实现播放列表主要有
15、“隐藏/展开”、“保存列表”、“删除选中视频”、“清空列表” 这四个功能。这个列表的四个功能实现前提是在工程的文件夹里新建一个txt文档并命名为“list.txt”。文档可以保存播放文件列表使在下次打开时可自动的生成播放列表。展开列表和隐藏列表是通过SetWindowPos()函数对对话框的大小进行设置,让最右边的列表可以显示出来和被隐藏。保存列表是利用CFile类中的相应函数来创建文本:file.Open(".list.txt",CFile:modeCreate|CFile:modeReadWrite|CFile:typeText);/创建文本再利用函数GetText()
16、和WriteString()这两个函数把列表中的内容写入文档中去。删除选中的视频则是通过如下代码来实现的:m_list.DeleteString(m_list.GetCurSel();/删除当前光标所选择的行清空列表直接利用Cwmpplaylist类中的ResetContent()函数来实现的。4. 心得体会本次课程设计安排在学期末,比较深入地考察了我们对MFC的运用及掌握。与让我们更进一步地了解到了Windows编程的实际应用,在开拓我们眼界的同时巩固了我们课上所学知识,也进一步锻炼了我们的自学能力和对Windows编程的实际运用能力。在开始了解到可视化编程的时候,我就特别地感兴趣,因为这较
17、于之前所学的普通C和C+编程来得更为实际,给人一种实际感,让我觉得学的东西能用得上,而且感觉也很有高端的感觉。可视化编程能极大地调动我的学习积极性,所以在Windows编程的学习中投入了更多的精力和时间,也对编程语言的学习有了前所未有的兴趣和好奇。很遗憾的是在本次卷面考试中没有相关的大题来检验我们的所学成果,庆幸的是学校安排了更为直接,更为合适课程设计的方法来考察我们的学习情况,对于编程语言这种课程来书,这种考查方式无疑是最佳的,实际的东西就要实践中去检验。本次课设我选择了最贴近我们生活所用的多媒体视频播放器的设计,这个课题使我产生了浓厚的兴趣,并开始很早就着手准备,可惜的是,开始遇到了一个难
18、题,之后由于各种考试实验等耽搁,所以被搁浅了,在最后几天才重新开始做,不过在真正自己编写的时候又遇到了各种问题,其中最严重的是在我自己和室友的电脑上,编译连接成功后,只要一运行就会崩溃,开始一直以为是软件编写过程中出了差错,花费了大量时间来调试和排错,但是并没有起到什么作用。后来意识到可能是软件和系统兼容性的问题,换到其他人的电脑上可以完美运行,不过由于之前耗费了大量时间,所以后面不得不放弃了开始原有的一些设计思路。总之呢,通过本次课程设计,自己学到了很多东西,不仅在对MFC应用程序的框架理解和相应创建上有了进一步提升,对自己的不足之处有了认识,也对程序的调试和检查有了更深入的掌握,也体会到了
19、与他人沟通交流的重要性,更进一步加深了我对Windows编程的浓厚兴趣。很感谢学校和老师能提供这次的锻炼机会,让自己在即将结束的年尾有了更多的收获,对于新的一年有了更多的思考与展望。5. 思考题1. 控件自带的类和本程序中的类是如何共同作用的?答:控件自带的类不能直接调用,是通过在头文件中定义相应类的对象,然后通过对象名来调用相应函数,而本程序对话框的类是通过给控件添加消息响应函数。一般控件类有关的函数都是在对话框自身的函数和控件的消息响应函数中调用。以此实现控件自带类和本程序中的类的共同作用。2. 说明程序中调用的控件函数的作用?答:各个控件的消息响应函数如下表所示:表3控件响应函数及其功能
20、功能控件函数功能控件函数退出OnExit()音量条OnCustomdrawSlider2 ()打开OnOpen()播放OnPlay()停止 OnStop()暂停/继续OnPause()播放列表 OnList()快进OnForward删除视频OnDelete()快退OnBackward()保存列表OnSave()静音/音量OnMute() 清空列表OnClear()6. 附录6.1 调试过程1.有一些头文件没有添加,导致在ZJ_KESHE_WMPDlg.cpp中构建函数时,很多控件函数不能被识别,导致出现了很多错误。2.开始编写到一般后,程序一运行就停止工作,后来不断进行单步调试,仍然解决不了问
21、题,最后发现是本人电脑上的软件的问题,换到其他人电脑上基本可以完美运行。3.开始音量条关联的变量没有初始化范围,然后起不到作用,后来添加了语句“m_volume.SetRange(0,100);”。4.在设置时候直接删除了原来的默认图标,然后在代码中将其ID号直接改为所设置的图标,后来编译有问题,逐步在代码中查找后发现还需要将有一处对话框创建里包含的删去。6.2 测试结果经过调试,程序能够正确运行,可以打开*.avi,*.mp3,*.wma,*.wmv,*.mov格式的文件,能够实现播放,暂停,停止,快进,快退,音量控制,播放列表控制等多种功能,其中大部分还可以在菜单选项中执行。整体运行结果如
22、下图所示:图8 运行结果图6.3 关键源代码BOOL CZJ_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=new CStdioFile(".list.txt",CFile:modeRead);/记住列表CString str;while(fsp->ReadString(str
23、)m_list.AddString(str);fsp->Close();delete fsp;/展开和隐藏列表void CZJ_KESHE_WMPDlg:OnList() /展开列表flag=!flag;if(flag=1)SetWindowPos(NULL,0,0,580,460,SWP_NOMOVE);elseSetWindowPos(NULL,0,0,795,460,SWP_NOMOVE);/打开void CZJ_KESHE_WMPDlg:OnOpen()Char szFileFilter="媒体文件(*.avi,*.mp3,*.wma,*.wmv,*.mov)|*.av
24、i;*.mp3;*.wma;*.wmv;*.mov|"CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR,szFileFilter);POSITION pos=dlg.GetStartPosition();if(dlg.DoModal()=IDOK)/点击确定添加文件while(pos!=NULL)m_PathName=dlg.GetNextPathName(pos);/获取文件路径m_list.AddString(m_PathName);/向列表添加文件路径/退出v
25、oid CZJ_KESHE_WMPDlg:OnExit() OnOK();/播放列表中双击播放选中文件void CZJ_KESHE_WMPDlg:OnDblclkList1() CString str;int index=m_list.GetCurSel();m_list.GetText(index,str);m_player.SetUrl(str);m_PathName=str;/保存列表void CZJ_KESHE_WMPDlg:OnSave()file.Open(".list.txt",CFile:modeCreate|CFile:modeReadWrite|CFil
26、e:typeText);/创建文本for(int i=0;i<m_list.GetCount();i+) CString strtemp;m_list.GetText(i,strtemp);/获得文本中的内容strtemp+="n"/需要换行file.WriteString(strtemp);/将获得内容写入列表file.Close();void CZJ_KESHE_WMPDlg:OnDelete() /从列表中删除选中视频m_list.DeleteString(m_list.GetCurSel();/删除当前光标所选择的行OnSave();/自动保存删除某一行后的播
27、放列表/删除列表void CZJ_KESHE_WMPDlg:OnClear() m_list.ResetContent();file.Open(".list.txt",CFile:modeCreate);void CZJ_KESHE_WMPDlg:OnPlay() /播放m_player.SetUrl(m_PathName);/读取路径开始播放m_player.GetSettings().SetVolume(50);/初始音量/暂停或继续void CZJ_KESHE_WMPDlg:OnPause() CString strtemp;GetDlgItemText(IDC_PAUSE,strtemp);/获取按钮上的字符if(strtemp.Compare("暂停")=0)/若显示“暂停”,点击暂停,并显示“继续”m_player.GetControls().pause();SetDlgItemText(IDC_PAUSE,"继续");if(strtemp.Compare("继续")=0)/实现从暂停点继续播放,并显示“暂停”m_player.GetControls().play(); SetDlgItemTex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 货物运输保险合同标准范本
- 经典文学《精神的三间小屋》读书心得
- 2026年考研英语一长篇阅读段落推断题卷附答案解析与言外之意
- 2026年托福独立写作在线教育利弊分析卷附答案解析与传统教育对比
- 家具定制化色彩匹配服务创新创业项目商业计划书
- 农副食品健身器材部件创新创业项目商业计划书
- 复古风格木制家具创新创业项目商业计划书
- 心理健康与家具设计创新创业项目商业计划书
- 一年级综合实践教学计划
- 医院设备采购合同范本与注意事项
- 压力容器工作人员安全操作规程
- 交流串激电机基本知识培训课件
- N1日语一级真题
- 受污染耕地安全利用培训课件
- LED显示屏现状及整改方案 1026
- 特种作业人员持证情况自查表
- 2022年中小学心理健康教育指导纲要
- 混凝土桥梁实用精细化分析和配筋设计
- GA∕T 1044.1-2012 道路交通事故现场安全防护规范 第1部分:高速公路
- 案例分析和路雪冷链物流管理
- 《县域义务教育优质均衡发展督导评估办法》解读课件
评论
0/150
提交评论