




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
多媒体技术论文题目名称:基于MFC的多媒体播放器的设计与实现学院:专业班级:计算机学院学院:专业班级:计算机学院计算机科学与技术四班学号:姓名:指导教师:完成日期:2016年6月29日目录TOC\o"1-5"\h\z.摘要 3.关键字 3\o"CurrentDocument".开发工具的介绍 3\o"CurrentDocument".基本功能的实现 3\o"CurrentDocument".设计思路 4\o"CurrentDocument".软件设计 5.结果展示 15\o"CurrentDocument".心得体会 16基于MFC的多媒体播放器的设计与实现计科四班罗前指导老师王勇智摘要:多媒体技术是现在信息技术领域发展的很迅速的一个技术,它的发展方向也很广泛,我们的生活几乎离不开多媒体,所以我设计了一个小程序,基于MFC的多媒体播放器的设计与实现,我认为这个小程序比较实用而且并不是很复杂,而且可以通过它来进入多媒体的这道大门,进行更加深入的学习。关键字:MFC多媒体关键字:MFC多媒体MediaplayerActiveX开发工具的介绍:VisualC++是Microsoft公司在1998年推出的基于Windows9X和WindowNT的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境,程序员可以利用该开发环境轻松地访问C++源代码的编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。VisualC++不仅包括编译器,而且它还包括许多的有用的组件,通过这些组建的协同工作,可以在VisualC++6.0集成环境中完成创建源文件,编辑资源,以及对源程序的编译,连接和调试等各项工作。MFC(MicrosoftFoundationClass)是用来编写Windows应用程序的C++类集,其中封装了大部分WindowsAPI函数和Windows控件,使用MFC类库和VisualC++提供的高度可视的应用程序开发工具,可使应用程序开发变得简单,提高代码的可靠性和可重用性。随着播放器性能的极大提高,程序中经常要播放一些音频,如果能够简单的插入一些音频并播放,将极大的缩短程序开发时间。本文就是基于MFC在VisualC++环境中利用windowsmediaplayer控件实现音频文件的播放。ActiveX控件是基于COM的可重用组件,主要用于插入ActiveX控件包容器或Web页,ActiveX在外观上和使用上和普通控件一样,还提供属性页以支持在包容器的设计阶段对ActiveX控件的属性进行可视化设计。基本功能的实现:这个播放器具有打开文件,播放,暂停,停止,全屏,退出,音量控制,上一曲,下一曲,快进,快退,静音等基本播放功能,并可以播放MP3,avi,等格式的多媒体文件。同时还具有播放列表,并且可以在播放模式中选择顺序播放,循环播放,单曲播放三种方式。设计思路:该播放器分为十个模块,根据ActiveMovie控件实现他们各自相应的功能。打开模块:打开目标文件。进度模块:显示目标状态。快进退模块:调节播放的快进和快退。播放模块:播放音频文件。暂停模块:暂停正在播放的音频文件。停止模块:结束当前正在播放的文件,但是播放器并不退出。全屏模块:实现文件的全屏播放。退出模块:关闭该播放器。循环模块:实现播放列表中的全部文件的单曲、随机或顺序循环播放。音量模块:调节文件播放的音量大小和静音。使用VC++6.0的AppWizard、ClassWizard和其中的各种控件可以方便地建立各种应用程序。但是想要实现更高级更复杂的功能,就要借助丰富的ActiveX控件资源。本实验计划使用VC++6.0自带的一个ActiveX控件ActiveMovieControlObject,来设计多媒体播放器。此多媒体具有一般的播放功能,能播放:*.mp3,*.wma,*.mdi,*.wav,*.avi,*.dat等文件,还有Repeat功能。软件设计:设计步骤:1、首先我们要注册控件:在windows“运行”里写入:regsvr32msdxm.ocx然后单击确定。只有注册了控件,后面的实验才能顺利的做下去。2、然后打开VisualC++6.0,在Projects下选择MFCAppWizard(exe),并取名MediaPlayer,然后建立基于对话框的应用程序。bIJ利中百拄工在文件口中吉林工造僵bIJ利中百拄工在文件口中吉林工造僵X.SQL匚口尻"门外/MFC应用相后疸.二-毋骡1俎51目工鼻MFC应用相后疸.二-毋骡1您要创建的应用程序类型是:「单文档阿广多・:文档|网行基本对话框(口】"文档r查看体系结构支持M您的资源使用的语言是:I中文陶体,巾闰||APPWZCHS,DLL|《上一步 下一步, 完版X在文件E中查找入洁果工mLDcbuFEinM/ ,J\MFC应用隹序向号-步簟2共4步 7XEditik9C«Btr-ol:|Rcc«r<4WCi><E.kD-ffk巧R・di。I匕Ki4ia您是否赭望包含:
用.'关产前话框
r上下文相关帮助
7Editik9C«Btr-ol:|Rcc«r<4WCi><E.kD-ffk巧R・di。I匕Ki4ia《上一步I不一步.I完成I_取常X在文件工中查找X结果又飞成gbu最皿/ [IaJJ图6图7MFCAppWizard生成的对话框3、打开ResourceView,选择其中的对话框,打开其中的主对话框,去掉对话框上的“确定”按钮,保留“取消”,将Caption改为“退出”。然后再在上面加上几个按钮,ID和Caption分别为IDC_OPEN,打开;IDC_PLAY播放;IDC_PAUSE,暂停;IDC_STOP,停止;IDC_CLOSE,退出;IDC_LOWER,一;IDC_UPPER,+;IDC_FULLSCREEN,全屏;IDC_ABOUT,关于;IDC_LAST,上一曲;IDC_NEXT,下一曲;IDC_FORWARD快进;IDC_REVERSE,快退;最终如图8所示。图8播放器功能界面4、力口入ActiveMovieControl控件。打开工程>增加口到工程->ComponentsandControls->RegisteredActiveXControls对话框,选择其中的ActiveMovieControlObject,Insert,OK之后,会发现控件面板上多了一项ActiveMovieControlObject,将它选中,直接放在对话框上,并拖成合适大小。最终效果如图10所示。SSMJfiALU工程⑥置建®工具由君口的«®(HJ受力网工程闻W百活竟二卷凹受力网工程闻|AIIcl哈।—— Sfldr«C&rtrfllSirFDSDIllIWOUTB-MEDIAPI从愚惶..,设置⑤导出SirFDSDIllIWOUTB-MEDIAPI从愚惶..,设置⑤导出(W作文件…•后文件回-岫+F7 蝴旧ComgonentE-andCo睢rob…逮人工的L工作至闰山…oFiwnO*-^Slidtr1(HMIIDR>pHNHDR,LRESULible//IODO:AddyourcontrolrotlFicetlvnnjfiaiertQdchere图10图10图10最终界面效果5、为ActiveMovieControl控件设置变量m_ActiveMovie。点中它,按Ctrl+W打开ClassWizard为它添加变量m_ActiveMovie。MFCCla»Wizard 7X图12为ActiveMovieControl控件设置变量m_ActiveMovie6、为程序添加消息处理函数。打开ClassWizard,为各个按钮加入消息处理函数。在MediaPlayerDlg.cpp文件里为各消息处理函数添加代码,部分代码如下:打开文件:voidCMediaPlayerDlg::OnOpen()(//TODO:Addyourcontrolnotificationhandlercodeherem_listCtrl.SetFocus();CStringstr;TCHARszFilter[]=_T("Mp3File(*.mp3)|*.mp3WmaFile(*.wma)|*.wma|VideoFile(*.dat)|*.dat|WaveFile(*.wav)|*.wav|AVIFile(*.avi)|*.avi|MovieFile(*.mov)|*.mov|MediaFile(*.mmm)|*.mmm|MidFile(*.mid;*,rmi)|*.mid;*.rmi|MPEGFile(*.mpeg)|*.mpeg|AllFile(*.*)|*.*||");CFileDialogfileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,this);CStringstrFilePath;if(IDOK==fileDlg.DoModal())(strFilePath=fileDlg.GetPathName();strFilePath.MakeUpper();m_player.SetUrl(strFilePath);m_media=static_cast<CWMPMedia>(m_player.newMedia(strFilePath));m_list.appendItem(m_media);m_listCtrl.InsertItem(count,m_media.GetName());m_listCtrl.SetItemText(count,1,_T(m_media.getItemInfo("FileType")));m_listCtrl.SetItemText(count,2,_T(m_media.GetDurationString()));m_listCtrl.SetItemText(count,3,_T(strFilePath));m_listCtrl.SetItemText(count++,4,_T(m_media.getItemInfo("Duration")));POSITIONpos;pos=m_listCtrl.GetFirstSelectedItemPosition();10IndexInFieldList=m_listCtrl.GetNextSelectedItem(pos);m_listCtrl.SetItemState(IndexInFieldList,〜LVIS_SELECTED,LVIS_SELECTED);m_player.SetUrl(m_listCtrl.GetItemText(0,3));m_listCtrl.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);))播放:voidCMediaPlayerDlg::OnPlay()(//TODO:Addyourcontrolnotificationhandlercodehereif(m_list.GetCount()<=0)MessageBox("列表无文件!","Warning",MB_OK);KillTimer(0);m_control.play();if(m_control.GetCurrentPosition()==0)m_control.SetCurrentPosition(0.01);SetTimer(0,20,NULL);)暂停:voidCMediaPlayerDlg::OnPause()(//TODO:Addyourcontrolnotificationhandlercodeherem_control.pause();)停止:voidCMediaPlayerDlg::OnStop()(//TODO:AddyourcontrolnotificationhandlercodehereKillTimer(0);m_control.stop();)全屏:voidCMediaPlayerDlg::OnFullscreen()(//TODO:Addyourcontrolnotificationhandlercodehereif(!m_player.GetFullScreen())(m_control.pause();AfxMessageBox("请双击退出全屏模式!!");m_player.SetFullScreen(true);m_control.play();11)退出:voidCMediaPlayerDlg::OnExit()(//TODO:AddyourcontrolnotificationhandlercodehereSendMessage(WM_CLOSE);)上一曲:voidCMediaPlayerDlg::OnLast()(//TODO:Addyourcontrolnotificationhandlercodeherem_listCtrl.SetFocus();POSITIONpos;CStringstrName;UINTflag1=LVIS_SELECTED|LVIS_FOCUSED;pos=m_listCtrl.GetFirstSelectedItemPosition();IndexInFieldList=m_listCtrl.GetNextSelectedItem(pos);if(IndexInFieldList==-1)(AfxMessageBox("列表内没有被选中项!");return;)if(IndexInFieldList==0)(AfxMessageBox("已经到了列表头部!");m_listCtrl.SetItemState(IndexInFieldList,flag1,flag1);return;)m_listCtrl.SetItemState(IndexInFieldList,〜LVIS_SELECTED,LVIS_SELECTED);m_listCtrl.SetItemState(IndexInFieldList-1,flag1,flag1);strName=m_listCtrl.GetItemText(IndexInFieldList-1,3);KillTimer(0);m_control.stop();m_player.SetUrl(strName);m_control.SetCurrentPosition(0.01);m_control.play();SetTimer(0,20,NULL);)下一曲:voidCMediaPlayerDlg::OnNext()(//TODO:Addyourcontrolnotificationhandlercodeherem_listCtrl.SetFocus();POSITIONpos;CStringstrName;UINTflag1=LVIS_SELECTED|LVIS_FOCUSED;pos=m_listCtrl.GetFirstSelectedItemPosition();12IndexInFieldList=m_listCtrl.GetNextSelectedItem(pos);if(IndexInFieldList==-1)(AfxMessageBox("列表内没有被选中项!");return;)if(IndexInFieldList==m_listCtrl.GetItemCount()-1)(AfxMessageBox("已经到了列表末尾!");m_listCtrl.SetItemState(IndexInFieldList,flag1,flag1);return;)m_listCtrl.SetItemState(IndexInFieldList,〜LVIS_SELECTED,LVIS_SELECTED);m_listCtrl.SetItemState(IndexInFieldList+1,flag1,flag1);strName=m_listCtrl.GetItemText(IndexInFieldList+1,3);KillTimer(0);m_control.stop();m_player.SetUrl(strName);m_control.SetCurrentPosition(0.01);m_control.play();SetTimer(0,20,NULL);)快进:voidCMediaPlayerDlg::OnForward()(//TODO:Addyourcontrolnotificationhandlercodeheredoublet=m_control.GetCurrentPosition();m_control.SetCurrentPosition(t=t+10);)快退:voidCMediaPlayerDlg::OnReverse()(//TODO:Addyourcontrolnotificationhandlercodeheredoublet=m_control.GetCurrentPosition();m_control.SetCurrentPosition(t=t-10);)静音:voidCMediaPlayerDlg::OnSilence()(//TODO:Addyourcontrolnotificationhandlercodehereif(!m_setting.GetMute())m_setting.SetMute(true);elsem_setting.SetMute(false);13音量加减:voidCMediaPlayerDlg::OnAdd()(//TODO:Addyourcontrolnotificationhandlercodeherem_setting.SetVOlume(m_setting.GetVOlume()+10);m_VOLUME.SetPos(m_setting.GetWlume());)voidCMediaPlayerDlg::OnSub()(//TODO:AddyourcontrolnotificationhandlercodehereintVolume=m_setting.GetVolume();m_setting.SetVolume(Volume=Volume-10);m_VOLUME.SetPos(m_setting.GetVolume());)列表:voidCMediaPlayerDlg::OnClickList1(NMHDR*pNMHDR,LRESULT*pResult)(//TODO:AddyourcontrolnotificationhandlercodehereLPNMITEMACTIVATE pNMItemActivatereinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);//TODO:AddyourcontrolnotificationhandlercodehereNMLISTVIEW*pNMListView=(NMLISTVIEW*)pNMHDR;*pResult=0;CStringstrName;if(-1!=pNMListView->iItem)(strName=m_listCtrl.GetItemText(pNMListView->iItem,3);KillTimer(0);m_control.stop();m_player.SetUrl(strName);m_control.SetCurrentPosition(0.01);m_control.play();SetTimer(0,20,NULL);))另外函数OnTimer()是通过ClassWizard(Ctrl+W)来添加的:图13voidCVedioPlayerDlg::OnTimer(UINTnIDEvent)(doubleCurr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023-2024学年西藏自治区拉萨市达孜区孜县达标名校中考猜题数学试卷含解析
- 2023-2024学年浙江省台州市天台、椒江、玉环三区重点中学中考三模数学试题含解析
- 2025至2030中国温室灌溉热潮行业产业运行态势及投资规划深度研究报告
- 加强工科专业本科生通识教育课程建设研究
- 太极拳运动治疗早期膝骨关节炎的临床疗效研究
- 室外自然场景的偏振三维重建技术研究
- 一年级状物作文寄思笔筒650字8篇
- 《文艺复兴时期的文学作品欣赏:高二语文教案》
- 心理学人际关系管理知识练习题
- 2025年数字货币对金融行业人才培养与职业发展的挑战报告
- 医疗废物管理相关法律、法规介绍
- 漯河医学高等专科学校辅导员招聘考试行政管理教师岗笔试面试历年真题库试卷
- 手把手教华为PTN设备业务配置
- 工程施工安全保证体系新版
- 政审在校证明
- 燕房线电缆技术规范
- 三年级道德与法治(下)知识点总结
- 变电站一次通流-通压试验方法的探讨与实践
- 线槽灯安装施工工法
- 自由公差对照表(共3页)
- 约克YS螺杆式冷水机组_《操作手册》6-3
评论
0/150
提交评论