多媒体视频播放器Word文档格式.docx
- 文档编号:17428883
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:15
- 大小:307.01KB
多媒体视频播放器Word文档格式.docx
《多媒体视频播放器Word文档格式.docx》由会员分享,可在线阅读,更多相关《多媒体视频播放器Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
图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
变量名称
类型
IDC_OCX1
WMPlayer
m_player
CWMPlayer4
IDC_SLIDER2
Slider
m_volume
CSliderCtrl
IDC_LIST1
ListControl
m_list
CListBox
对话框的最后样式为:
图6对话框的样式
3.2.3菜单栏设计
在已经构建好对话框,完成控件的关联和相应消息响应函数的添加后,菜单栏的添加就相对简单多了,只需要将相应菜单选项的ID号与上述表中ID保持一致就能直接用菜单选项调用相应消息响应函数了。
图7菜单栏的创建
3.3关键功能的实现
关键功能的实现主要都是在相关控件的相应消息相应函数中添加相应的代码,从而实现所需要的功能。
下面将讨论关键的功能函数,相应代码在附录中给出。
3.3.1“打开”、“播放”功能的实现
“打开”按钮主要是实现了对打开的文件进行过滤,主要使用了szFileFilter()函数。
定义了能打开的文件格式等。
点击确定时,首先是获取文件路径,然后把文件路径传给播放列表中,列表在从文件路径中提取文件名来显示。
而“播放”按钮能够从列表中获取文件路径,然后把文件路径通过SetUrl()交给控件读取播放。
同时定义了初始的音量大小。
3.3.2“暂停/继续”、“停止”功能的实现
“暂停/继续”按钮是通过GetDlgItemText()函数获取按钮上的字符来判断是当按钮按下时是执行暂停还是继续播放,并通过SetDlgItemText()函数来改变按钮上的显示字符。
其中暂停和继续播放这里是利用Cwmpcontrols类中的GetControls().pause()和GetControls().play()这两个函数来实现的。
当按下暂停时视频停止播放,同时按钮显示“继续”,点击“继续”,则继续播放视频并显示“暂停”。
而“停止”功能在这里则是直接利用了控件类中的close()函数来实现停止的。
值得一提的是程序中的快进快退功能也是利用了Cwmpcontrols类中的fastForward()和fastReverse()函数来实现的。
3.3.3静音和音量滚动条的实现
静音功能的实现与“暂停/继续”功能类似,都是利用GetDlgItemText()和SetDlgItemText()函数来获取和改变按钮上的显示字符。
所不同的是,静音功能的实现是调用了“CWMPSettings.cpp”文件里的SetVolume()函数。
初始时按钮显示“音量”,按下后静音,音量滚动条也回到最低位置,按钮显示“静音”,再次按下音量恢复,显示“音量”。
音量滚动条相比于前面几个功能的实现,要显得复杂很多,区别于其他命令按钮的,它是滑块,需要关联变量“m_volume”,在“OnInitDialog()”函数中已对滑块范围进行初始化——m_volume.SetRange(0,100);
使音量变化范围为0~100,再调用嵌套函数m_player.GetSettings().SetVolume(m_volume.GetPos());
来获取滑块位置并设置相应音量。
3.3.4播放列表功能的实现
播放列表主要有“隐藏/展开”、“保存列表”、“删除选中视频”、“清空列表”这四个功能。
这个列表的四个功能实现前提是在工程的文件夹里新建一个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()函数来实现的。
4.心得体会
本次课程设计安排在学期末,比较深入地考察了我们对MFC的运用及掌握。
与让我们更进一步地了解到了Windows编程的实际应用,在开拓我们眼界的同时巩固了我们课上所学知识,也进一步锻炼了我们的自学能力和对Windows编程的实际运用能力。
在开始了解到可视化编程的时候,我就特别地感兴趣,因为这较于之前所学的普通C和C++编程来得更为实际,给人一种实际感,让我觉得学的东西能用得上,而且感觉也很有高端的感觉。
可视化编程能极大地调动我的学习积极性,所以在Windows编程的学习中投入了更多的精力和时间,也对编程语言的学习有了前所未有的兴趣和好奇。
很遗憾的是在本次卷面考试中没有相关的大题来检验我们的所学成果,庆幸的是学校安排了更为直接,更为合适课程设计的方法来考察我们的学习情况,对于编程语言这种课程来书,这种考查方式无疑是最佳的,实际的东西就要实践中去检验。
本次课设我选择了最贴近我们生活所用的多媒体视频播放器的设计,这个课题使我产生了浓厚的兴趣,并开始很早就着手准备,可惜的是,开始遇到了一个难题,之后由于各种考试实验等耽搁,所以被搁浅了,在最后几天才重新开始做,不过在真正自己编写的时候又遇到了各种问题,其中最严重的是在我自己和室友的电脑上,编译连接成功后,只要一运行就会崩溃,开始一直以为是软件编写过程中出了差错,花费了大量时间来调试和排错,但是并没有起到什么作用。
后来意识到可能是软件和系统兼容性的问题,换到其他人的电脑上可以完美运行,不过由于之前耗费了大量时间,所以后面不得不放弃了开始原有的一些设计思路。
总之呢,通过本次课程设计,自己学到了很多东西,不仅在对MFC应用程序的框架理解和相应创建上有了进一步提升,对自己的不足之处有了认识,也对程序的调试和检查有了更深入的掌握,也体会到了与他人沟通交流的重要性,更进一步加深了我对Windows编程的浓厚兴趣。
很感谢学校和老师能提供这次的锻炼机会,让自己在即将结束的年尾有了更多的收获,对于新的一年有了更多的思考与展望。
5.思考题
1.控件自带的类和本程序中的类是如何共同作用的?
答:
控件自带的类不能直接调用,是通过在头文件中定义相应类的对象,然后通过对象名来调用相应函数,而本程序对话框的类是通过给控件添加消息响应函数。
一般控件类有关的函数都是在对话框自身的函数和控件的消息响应函数中调用。
以此实现控件自带类和本程序中的类的共同作用。
2.说明程序中调用的控件函数的作用?
各个控件的消息响应函数如下表所示:
表3控件响应函数及其功能
功能
控件函数
音量条
OnCustomdraw
Slider2()
停止
播放列表
OnForward
OnMute()
6.附录
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("
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);
else
SetWindowPos(NULL,0,0,795,460,SWP_NOMOVE);
//打开
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);
//向列表添加文件路径
}
//退出
OnExit()
OnOK();
//播放列表中双击播放选中文件
OnDblclkList1()
intindex=m_list.GetCurSel();
m_list.GetText(index,str);
m_player.SetUrl(str);
m_PathName=str;
//保存列表
file.Open("
//创建文本
for(inti=0;
i<
m_list.GetCount();
i++)
CStringstrtemp;
m_list.GetText(i,strtemp);
//获得文本中的内容
strtemp+="
\n"
//需要换行
file.WriteString(strtemp);
//将获得内容写入列表
file.Close();
OnDelete()//从列表中删除选中视频
m_list.DeleteString(m_list.GetCurSel());
//删除当前光标所选择的行
OnSave();
//自动保存删除某一行后的播放列表
//删除列表
OnClear()
m_list.ResetContent();
modeCreate);
OnPlay()//播放
m_player.SetUrl(m_PathName);
//读取路径开始播放
m_player.GetSettings().SetVolume(50);
//初始音量
//暂停或继续
OnPause()
GetDlgItemText(IDC_PAUSE,strtemp);
//获取按钮上的字符
if(strtemp.Compare("
暂停"
)==0)//若显示“暂停”,点击暂停,并显示“继续”
m_player.GetControls().pause();
SetDlgItemText(IDC_PAUSE,"
继续"
);
)==0)//实现从暂停点继续播放,并显示“暂停”
m_player.GetControls().play();
//停止
OnStop()
m_player.close();
//静音或正常音量
CStringstrtemp;
if((m_player.GetPlayState()==2)||(m_player.GetPlayState()==3))
GetDlgItemText(IDC_MUTE,strtemp);
音量"
)==0)//若显示“音量”,点击音量,并显示“静音”
vol=m_player.GetSettings().GetVolume();
//获取当前音量值
m_player.GetSettings().SetVolume(0);
//设为静音
SetDlgItemText(IDC_MUTE,"
静音"
)==0)
m_player.GetSettings().SetVolume(vol);
//恢复当前音量值
else;
//音量条
OnCustomdrawSlider2(NMHDR*pNMHDR,LRESULT*pResult)
m_player.GetSettings().SetVolume(m_volume.GetPos());
*pResult=0;
//快退
OnBackward()
m_player.GetControls().fastReverse();
//快进
OnForward()
m_player.GetControls().fastForward();
7.参考文献
[1]揣锦华.面向对象程序设计与VC++实践[M].西安:
西安电子科技大学出版社,2005.
[2]马德骏,张建宏,汤练兵.C语言程序设计[M].北京:
科学出版社,2009.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多媒体 视频 播放