目录
欧阳光明(2021.03.07)
多媒体视频播放器1
1基本功能描述1
2设计思路1
3软件设计2
3.1设计步骤3
3.2界面设计6
3.3关键功能的实现9
3.3.1“打开”功能的实现9
3.3.2“播放”、“暂停”、“停止”“全屏”功能的实现10
3.3.3“上一首”和“下一首”功能实现11
3.3.4音量滑动条功能的实现12
3.3.5播放列表功能的实现13
3.3.6进度滑动条功能的实现15
4结论与心得体会16
5参考文献17
6思考题17
7附录18
7.1调试报告18
7.1.1调试一18
7.1.2调试二19
7.2测试结果19
7.3关键源代码21
多媒体视频播放器
1基本功能描述
多媒体视频播放工具是目前计算机必备的一个软件,比较流行的有RealPlayer、
WindowsMediaPlayer以及国产暴风影音等,能够播放RM、RMVB、MP3、MPEG、
DAT等多种格式的视频文件mp3、wma、mdi、wav、avi、dat等格式的音频文件。
用VC++软件设计并编写出一个多媒体视频播放器。在设计期间,武松结局 可以选择使用的多
媒体控件,制作与用户交互性较好的应用程序界面。对于控件有多种,可以自己选择。本
次课程设计要使用VC++6.0内部的ActiveX控件——WindowsMediaPlayer控件,建立自
己的多媒体播放器。
此多媒体播放器具有打开文件、播放、暂停、停止、关闭、全屏、音量滑块调节、进
度滑块调节、快进、快退、显示隐藏播放列表等基本功能,可以播放*.mp3、*.wma、
*.mdi、*.wav、*.avi、*.dat、*.mpg、*.rmvb等格式的多媒体文件。同时还具有自制的
播放列表,可以按照列表上的顺序进行一曲、下一曲的播放。
2设计思路
WindowsMediaPlayer是一款Windows系统自带的播放器,支持通过插件增强功能。
其控件作为本次课设的媒体控件可以满足要求。并且该控件是微软自带的免费控件,通
常每个电脑都应有这个控件,方便设计出来的软件在各个电脑运行。
根据WindowsMediaPlayer和各个按钮控件功能的特点,首先要在初始化中对
CWMPControl,CWMPSettings,CWMPPlaylist,CWMPMedia等类的对象进行绑定和定
义。播放器的一些基本的功能如播放、暂停、全屏、静音、快进、快退等主要是调用
CWMPControl和CWMPPlayer类中的成员函数来进行实现。对于打开按钮,需要调用通
用文件对话框类,调用szFileFilter()文件过滤函数和GetFileName()获取文件名函数。
除了以上提到的功能的实现,还有进度滑条Slider_progress和音量滑动条Slider2是通
过对CSliderCtrl类实现的。
图1视频播放器流程图
3软件设计
设计平台可以是Win32的操作平台上,使用已安装的VC6.0++进行设计和调试。在设
初始化
点击“打开”选择文件
显示在中
双击列表框中内容或选中单击“播放”开始播放
点击“保
存列表”
删除列
表
打开程序
音量滑块50,新建,计时器开启
点击
“暂停/
点击
“停
点击
“下一
点击“快
进”
音量
调节
OnTimer
()
响应
CwnpCon
trol类中
的pau
函数和
play函数
响应
CwnpC
ontrol
类中的
stop函
数
intidex=当
前光标位
置加1,读
取idex中
文本,返
回SetUrl
函数
响应
CwnpCo
ntrol类
中的
fastForw
ard函数
获取位置
参数返回
响应
CwnpSetti
ng类中的
Setvolume
获取当前播
放位置返回
给进度条滑
块的SetPos
获取音量返
回SetPos
计前要确保平台中有WMP控件。结合之前的设计思路,使用WindowsMediaPlayer等控
件来制作多媒体视频播放器。若是Win64这与VC6.0++不兼容,可以选择更高的版本。
3.1设计步骤
打开VC++6.0,点击“新建”,在“新建”窗口选择“工程”选项卡。由于程序是基
于
对话框的MFC应用程序使用WindowsMediaPlayer等控件来制作多媒体视频播放器。设
置好地址位置和工程名后点“确定”。这里的工程名字可以是自己的名字拼音缩写,也
可以没有任何含义。
图2“新建”对话框示意图
在点击“确定”后进入到了“MFC应用程序向导—步骤1”的设置界面,选择“基本对话
框”,然后点击“下一步”。
图3“MFC应用程序向导”示意图
在剩下的3个步骤中,全部选择默认的设置,不要做随意更改,直至“完成”便实现了
对话框的创建。然后是插入控件,先把系统初始化的按钮用“Delete”删除,在单击鼠标
右键选择“插入ActiveX控件”,在跳出的对话框中选择“WindowsMediaPlayer”(一
般当电脑安装了WindowsMediaPlayer,其控件也应该存在),点击“确定”。
图4添加“WindowsMediaPlayer”控件示意图
虽然已经插入控件了,但这时的控件还不能使用,因为控件的各种类并没有一起加入
工程类中。右击鼠标,选择“建立类向导……”,这时系统跳出对话框提示是否加入来
自控件的类,直接点击“确定”就可以了。
图5“WindowsMediaPlayer”控件类添加示意图
接着对控件关联变量,右击加入的WMP控件,点击“属性”,把ID改为
“IDC_player”,然后打开“建立类向导……”点到“MemberVariables”页面向
IDC_player添加变量。单击“ADDVariables”,会弹出图6所示的“Addmembername”
对话框,命名为“m_player”,设为控制“Control”型,点击“OK”。
图6变量命名示意图
关联变量之后才算是真正的添加了该控件,可以发现在关联变量之后,控件工具栏多
了“WindowsMediaPlayer”控件的选项,并且在“SourceFiles”中增加了17个类,相应
的头文件也增加了17个,其中最主要的类为Cwmpplayer4,Cwmpcontrols,
Cwmpmedia,Cwmpttings四个大类。
Cwmpplayer4类主要是关于对其他类的对象的调用以及基本的控件功能的实现,提供
了与WindowsMediaPlayer控件进行交迎难而上近义词 互的基本方法,其中部分成员函数还能够进一步获
取得到其他相关类对象的实例;Cwmpcontrols类主要是对控件的更多的操作;
Cwmpmedia类主要是对于媒体文件资源的一些操作;Cwmpttin新冠变种 gs类主要是对于媒体文
件中的一些基本设置的操作。
3.2界面设计
首先是打开按钮,用于媒体文件的打开;然后依次是播放、暂停、停止、快进、快
退、静音、全屏、退出、上一首、下一首、显示/隐藏按钮,以及视频进度滑块和音量滑
块条Slider控件。对控件主要进行变量的关联,以及ID的修改,对于普通按钮进行ID修
改,结果如下下表1、表2、表3和表4所示。
表1控件ID以及对应响应函数表
按钮ID控件Caption消息响应函数类型
IDC_BUTTON_open打开OnBUTTONopen()命令按钮
IDC_BUTTON_fullscreen全屏OnBUTTONfullscreen()命令按钮
IDC_BUTTON_play播放OnBUTTONplay()命令按钮
IDC_BUTTON_pan暂停/播放OnBUTTONpan()命令按钮
IDC_BUTTON_stop停止OnBUTTONstop()命令按钮
IDC_BUTTON_fastforward快进OnBUTTONFastforward()命令按钮
IDC_BUTTON_fastever快退OnBUTTONfastever()命令按钮
IDC_BUTTON_pre上一曲OnBUTTONpre()命令按钮
IDC_BUTTON_next下一曲OnBUTTONnext()命令按钮
IDC_BUTTON4_mute静音OnBUTTON4mute()命令按钮
IDCANCEL退出无命令按钮
IDC_BUTTON_show隐藏/展开OnBUTTONshow()命令按钮
IDC_BUTTON_save保存列表OnBUTTONsave()命令按钮
IDC_BUTTON_clear删除列表OnBUTTONclear()命令按钮
然后是加入一些关联变量的控件,之前加入了WMPlayer,还要加入类别为“滑块”
的Slider来当调节声音的滑块,还有加入类别为“列表框”的ListControl来充当播放列
表。
表2控件ID以及关联变量表
按钮ID控件Caption变量名称类型
IDC_OCX1WMPlayerm_playerCWMPlayer4
IDC_SLIDER_progressSliderm_jinduCSliderCtrl
IDC_SLIDER_volSliderm_volCSliderCtrl
IDC_LIST_MENUListControlm_list2CListBox
在按钮对应的消息响应函数中写程序将要用到表2的变量和WMP控件中的5个类的
函数。
在这五个类中:Cwmpplayer4类主要是关于对其他类的对象的调用以及基本的控件功
能的实现,是WMP控件函数与外部交流的桥梁,不可缺少。宁外其部分成员函数还能够
进一步获取得到其他相关类对象的实例;Cwmpcontrols类主要是对控件的更多的操作,
例如播放、暂停;Cwmpmedia类主要是对于媒体文件资源的一些操作,例如获取路径和
名称;Cwmpplaylist类主要是关于播放列表的操作;Cwmpttings类主要是对于媒体文件
中的一些基本设置的操作。
表3其他类及对应对象表
表4其他数据定义
数据类型变量名数据类型变量名
CStringm_FileNameBOOLflag,flag2,n
CStringm_PathNameintvol
除了对各个控件关联变量以及消息响应函数,还要对对话框类进行消息响应函数的关
类名头文件名对象名
_Control
_Setting
_Media
_Playlist
联,如当一首歌播放完后的模式选择。应用到WM_TIMER消息响应函数以及SetTimer()
和KillTimer()函数,如图建立OnTimer函数。
图7添加“WM_TIMER”消息函数示意图
还有菜单的设计,其相对简单,只要名称和ID与表1保持一致就可以了。在
“ResourceFile”中右击鼠标添加“MENU”,属性为“IDR_MENU1”。但是菜单并未
与对话窗口有实质联系,需要将菜单加入到“IDD_SHIFAN_DIALOG”中来,在
“IDD_SHIFAN_DIALOG”窗口空白右键单击,选中菜单“IDR_MENU1”,这样便完成
了对菜单的加载。
图8控件按钮分布图
编译运行程序后得到了初步的界面效果图,当然还没有加入新年快乐作文 函数。同时在左上角会显
示自己写的工程名“YLJ_Media_Player”,如图8所示。
3.3关键功能的实现
对于各个按钮、列表功能的实现主要是通过对各个函数加入相应的代码,下文将列出
相应的关键代码。
3.3.1“打开”功能的实现
“打开”按钮主要是实现了对打开的文件进行过滤,主要使用了szFileFilter()函数。点击
确定时,首先是把文件路径传给播放列表中,列表在从文件路径中提取文件名来显示。
然后又把文件路径通过SetUrl()交给控件读取播放。
voidCYLJ_Media_PlayerDlg::O花巨兔 nBUTTONopen()
{
charszFileFilter[]="所有支持类型
|*.mp3;*.mp4;*.wma;*.dat;*.wav;*.avi;*.mov;*.rmvb;*.mmm;*.mid;*.rmi;*.mpeg;*.mpg|"
"Mp3File(*.mp3)|*.mp3|"
"Mp4File(*.mp4)|*.mp4|"
"WmaFile(*.wma)|*.wma|"
"VideoFile(*.dat)|*.dat|"
"WaveFile(*.wav)|*.wav|"
"AVIFile(*.avi)|*.avi|"
"MovieFile(*.mov)|*.mov|"
"RmvbFile(*.rmvb)|*.rmvb|"
"MediaFile(*.mmm)|*.mmm|"
"MidFile(*.mid;*,rmi)|*.mid;*.rmi|"
"MPEGFile(*.mpeg)|*.mpeg|"
"MPGFile(*.mpg)|*.mpg|"
"AllFile(*.*)|*.*||";//文件类型过滤
CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
POSITIONpos=rtPosition();
if(l()==IDOK)
{while(pos!=NULL)
{
m_PathName=tPathName(pos);
m_ing(m_PathName);
}
}
}
3.3.2“播放”、“暂停”、“停止”“全屏”功能的实现
其实和3.3.1中提到一种播放方法一样使用了SetUrl()函数来实现。
voidCYLJ_Media_Player鼓掌英文 Dlg::OnBUTTONplay()
{
CStringstr;
intindex=m_Sel();
m_t(index,str);
m_(str);
}
“暂停”和“停止”功能实现方法和播放差不多,只是使用的m_trols()
中函数改变了。
voidCYLJ_Media_PlayerDlg::OnBUTTONpan()
{
flag2=!flag2;
if(flag2){
m_trols().pau();
}
el{
m_trols().play();
}
}
voidCYLJ_Media_PlayerDlg::OnBUTTONstop()
{
m_trols().stop();
}
全屏功能的实现也是调用SetFullScreen(TRUE)函数来实现。
voidCYLJ_Media_PlayerDlg::OnBUTTONfullscreen()
{
m_lScreen(TRUE);
}
3.3.3“上一首”和“下一首”功能实现
“上一首”就是让光标往上移一行,也就是对应的光标变量(index)减去1。当要判
断光标在第一行的情况,也就是index=0的时候,这时光标应移到最后一首歌曲或视频
上。
voidCYLJ_Media_PlayerDlg::OnBUTTONpre()
{
CStringstr;
intindex=m_Sel()-1;//光标减一
if(index<0)index=m_nt()-1;//如果播放完第一曲就自动播放最后一首
m_t(index,str);//获得当前光标所指的路径字符串
m_(str);//开始播放上一首
m_Sel(index);//自动置光标
}
其“下一首”和“上一首”大同小异,只不过index应加1,在光标为最后一行时应
判断移动到第一行。
voidCYLJ_Media_PlayerDlg::OnBUTTONnext()
{
CStringstr;
intindex=m_Sel()+1;//光标加一
if(index>=m_nt())index=0;//如果播放完最后一曲就自动播放第一首
m_t(index,str);//获得当前光标所指的路径字符串
m_(str);//开始播放下一首
m_Sel(index);//自动置光标
}
3.3.4音量滑动条功能的实现
音量滑动条是区别于其他命令按钮的,它是滑块,是调用CSliderCtrl控件的m_vol变
量来实现的。音量调节函数主要是使用一个嵌套函数
“m_tings().SetVolume(100-m_());”实现的。设置音量用的是
“SetVolume()”函数。在“OnInitDialog()”函数中已对滑块范围进行初始化——
CSliderCtrl*pSlide1=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);pSlide1->SetRange(0,100);
使音量变化范围为0~100。
voidCYLJ_Media_PlayerDlg::OnReleadcaptureSlider1(NMHDR*pNMHDR,
LRESULT*pResult)
{
m_tings().SetVolume(100-m_());
*pResult=0;
}
另外静音程序如下,在静音按钮按下后把系统音量保存在vol中,等恢复时使用,再
设置为静音,再次按下后取消静音然后恢复开始音量。
voidCYLJ_Media_PlayerDlg::OnBUTTON4mute()
{
n=!n;
if(n)
{
vol=m_tings().GetVolume();//获取当前音量值
m_tings().SetMute(TRUE);//设为静音
}
el
{
m_tings().SetMute(FALSE);//解除静音
m_tings().SetVolume(vol);//恢复当前音量值
}
}
3.3.5播放列表功能的实现
播放列表主要有“隐藏/展开”、“保存列表”、“清空列表”这三个功能。
这个列表的三个功能实现前提第一次运行程序时会在E盘新建一个txt文档并命名为
“”。初始化函数如下:
CStdioFile*fsp=newCStdioFile("E:",CFile::modeRead);
CStringstr;
while(fsp->ReadString(str))
{
m_ing(str);
}
fsp->Clo();
deletefsp;
文档可以保存播放文件列表使在下次打开时可自动的生成播放列表。下面是“保存列
表”的函数。
voidCYLJ_Media_PlayerDlg::OnBUTTONsave()
{
//TODO:Addyourcontrolnotificationhandlercodehere
CStdioFilefile;
CStringstrtemp;
("E:",CFile::modeCreate|CFile::modeReadWrite|CFile::typeText);
for(inti=0;i
{
CStringstrtemp;
m_t(i,strtemp);
strtemp+="n";//换行
tring(strtemp);
}
();
}
然后是“清除列表”功能,用“RetContent()”直接清除列表。
voidCYLJ_Media_PlayerDlg::OnBUTTONclear()
{
CStdioFilefile;
m_ontent();
("E:",CFile::modeCreate);
();
}
最后是“显示/隐藏”功能,其实就是在重新设置窗口大小,若展开则恢复原来的窗
口大小,这里使用了SetWindowPos()函数。
voidCYLJ_Media_PlayerDlg::OnBUTTONshow()
{
flag=!flag;
if(flag)SetWindowPos(NULL,0,0,500,520,SWP_NOMOVE);
elSetWindowPos(NULL,0,0,702,520,SWP_NOMOVE);
}
3.3.6进度滑动条功能的实现
进度条可以时时显示播放的位置,而视频进度滑块的初始化放在OnHScroll()函数中
实现。
voidCYLJ_Media_PlayerDlg::OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*
pScrollBar)
{
intm_time;
m_time=(int)m_rentMedia().GetDuration();
m_ge(0,m_time);//初始化视频进度滑块
intNewPos;
if((CSliderCtrl*)pScrollBar==&m_jindu)
{
switch(nSBCode)
{
caSB_THUMBTRACK:
m_(nPos);
m_trols().SetCurrentPosition((double)nPos);
break;
caSB_PAGEDOWN:
NewPos=m_();
m_trols().SetCurrentPosition((double)NewPos);
break;
caSB_PAGEUP:
NewPos=m_();
m_trols().SetCurrentPosition((double)NewPos);
break;
}
}
视频进度的控制主要是SB_THUMBTRACK、SB_PAGEDOWN、SB_PAGEUP,三个
消息响应即移动滑块、单击滑块右边滑条、单击滑块左边滑条的消息响应来实现视频进
度的控制。
4结论与心得体会
平时我挺喜欢听歌看电影的,当看到老师给的选题中有多媒体视频播放器这个题目,
我开始是还是挺激动的,能够自己做一个简单的程序,满足自己的爱好也是挺有成就感
的。
在一开始选这个课题时,我和其他同学都觉得很难。不像简单计算器和画图软件等课
题曾在上课提到过,对于多媒体播放器我看到看到了题目不知道该怎样做。然后我花了
大量时间去了解第一步怎么做,分别查找了各个控件基本用法功能,最后选用了
WindowsMediaPlayer控件,因为我vc中只能找到这个与视频有关的控件,于是在网上
查了一些关于WindowsMediaPlayer控件的资料,结果按照网上说的方法来根本无法实
现,因为网上都说要先插入17个WindowsMediaPlayer控件相关的类,但是我vc却不照
网上那样实现,所以在头两天是在摸索中,耗费了很多时间,最后我先不管第一步,直
接插入控件,然后发现关联变量时会有提示要插入17个类,点确定就行,问题就这么解
决了。
然后我和同组的同学在网上找相应的资料,找到怎样在VC++6.0里加入控件,各个控
件的说明书。进过比较和分析,我们一致采用WindowsMediaPlayer多媒体软件旗下的控
件WMP控件。因为WMP控件本身就是微软自带的控件,不存在兼容问题。还有每个电
脑多都有WindowsMediaPlayer播放器,其控件也都注册了。
知道怎样使用WMP控件,就可以很轻松地完成软件流程图的设计。我结合了自己在
网上搜索的资料,做好了整个多媒体播放器的整体设计,确定了软件的框架、主要构件
以及构件之间的关联,而后由总体设计逐渐深入完成软件的详细设计和开发过程。编写
代码更加有条理,才会更加符合软件工程的标准。整个程序设计我做了两天,每天熬夜
到1点多,也学会了不少东西。
最后终于变好了,编写的软件可以满足课程设计给出的要求。系统能选择打开、播
放、暂停、停止音频文件和视频文件,并能控制声音的大小,可以播放*.mp3、*.wma、
*.mdi、*.wav、*avi、*dat等格式的多媒体文件。看到点击每一个按钮都能有相应的反
应,顿时有了一种莫名的成就感,也感觉到自己的汗水得到了回报。
纸上得来终觉浅,绝知此事要躬行。要想完成一项作品,并不是想的那样简单,做
起来总是会遇到问题的,这时就需要要解决问题的能力和坚持不懈的决心。通过本次
试验,我收获了很多,对面向对象程序设计这门课所学的知识有了更好的理解。书山
有路勤为径,学海无涯苦作舟。
5参考文献
[1]揣锦华.面向对象程序设计与VC++实践[M].西安电子科技大学出版社.2005
[2]郑阿奇.VisualC++教程[M].北京:机械工业出版社.2004
[3]周长发.VisualC++.NET多媒体编程[M].电子工业出版社.2002
[4]SteveMack.流媒体宝典.电子工业出版社.2003
[5]王育坚.VisualC++面向对象编程教程.第2版.北京:清华大学出版社,2008
6思考题
1)控件自带的类和本程序中的类是如何共同作用的?
答:控件自带的的类肯定会在对话框的主程序中被调用,那么就要在主程序中
#include入对应类的头文件。对需要用到的类生成对应的对象以实现类中函数的使用。
调用了控件类中的函数后,还需要调用对话框自身的函数,比如消息及消息响应函数
等函数,以及各控件对应的消息响应函数。如此便可以实现控件自带类和本程序中的类
的共同作用。
2)说明程序中调用的控件函数的作用?
答:控件的不同类有不同的函数与之对应,不同函数有不同的功能。其函数功能见
表。
表5控件函数和对应的功能
功能控件函数功能控件函数
打开OnBUTTONopen()进度刷新OnTimer()
播放OnBUTTONplay()停止OnBUTTONstop()
暂停OnBUTTONpau()上一首OnBUTTONpre()
快进OnBUTTONFastforward下一首OnBUTTONnext()
快退OnBUTTONFastrever()保存列表OnBUTTONsave()
声音滑块OnReleadcaptureSlider1()清空列表OnBUTTONclear()
全屏OnBUTTONfullscreen()进度控制OnHScroll()
7附录
7.1调试报告
7.1.1调试一
运行时错误指明如下如图所示:
图9调试一错误提示
错误提示为:uofundefinedtype'CWMPControls'。在这行代码中,我用控件变量
m_player调用GetControls()函数来获得CWMPControls类的对象以调用该的成员函数
pau()函数宿命电影 ,根据错误提示可知,我这行代码是写在视图类中,调用pau()属于类外调
用,但是该类不认识CWMPControls类,所以要在视图类的最前面要加个头文件#include
"wmpcontrols.h"。
7.1.2调试二
在调试播放列表时,看到播放列表中显示了路径感觉没有必要,所以修改了代码使只
把歌曲名给了代码。但这样再来播放列表上的歌曲时不能播放。
图10调试二的说明图
原因:是因为播放列表上只有歌曲名,没了路径的话是不能找到文件的,所以不能播
放。所以解决方法是修改代码使其把歌曲路径递给播放列表。但后来听老师的解说,可
以通过取字符串函数来从路径里取文件名。即播放列表中储存的是路径,但显示的是路
径中文件名。
7.2测试结果
编写好的软件能选择打开、播放、暂停、停止音频文件和视频文件,并能控制声音的
大小,以及播放的进度,可以播放*.mp3、*.wma、*.mdi、*.wav、*avi、*dat等格式的
多媒体文件。同时还具有自制的播放列表,可以按照列表上的顺序进行一曲、下一曲的
播放,同时还有4月22日是什么节日 保存列表和删除歌曲的作用。
图11播放器播放音乐展示
图12播放器隐藏列表展示
7.3关键源代码
voidCYLJ_Media_PlayerDlg::OnBUTTONopen()
{
charszFileFilter[]=
"所有支持类型
|*.mp3;*.mp4;*.wma;*.dat;*.wav;*.avi;*.mov;*.rmvb;*.mmm;*.mid;*.rmi;*.mpeg;*.mpg|"
"Mp3File(*.mp3)|*.mp3|"
"Mp4File(*.mp4)|*.mp4|"
"WmaFile(*.wma)|*.wma|"
"VideoFile(*.dat)|*.dat|"
"WaveFile(*.wav)|*.wav|"
"AVIFile(*.avi)|*.avi|"
"MovieFile(*.mov)|*.mov|"
"RmvbFile(*.rmvb)|*.rmvb|"
"MediaFile(*.mmm)|*.mmm|"
"MidFile(*.mid;*,rmi)|*.mid;*.rmi|"
"MPEGFile(*.mpeg)|*.mpeg|"
"MPGFile(*.mpg)|*.mpg|"
"AllFile(*.*)|*.*||";//文件类型过滤
CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
POSITIONpos=rtPosition();
if(l()==IDOK)
{while(pos!=NULL){
m_PathName=tPathName(pos);
m_ing(m_PathName);
}
}
}
voidCYLJ_Media_PlayerDlg::OnBUTTONpan()
{
flag2=!flag2;
if(flag2){
m_trols().pau();
}
el{
m_trols().play();
}
}
voidCYLJ_Media_PlayerDlg::OnBUTTONplay()
{
CStringstr;
intindex=m_Sel();
m_t(index,str);
m_(str);
}
voidCYLJ_Media_PlayerDlg::OnBUTTON4mute()
{
n=!n;
if(n)
{
vol=m_tings().GetVolume();//获取当前音量值
m_tings().SetMute(TRUE);//设为静音
}
el
{
m_tings().SetMute(FALSE);//解除静音
m_tings().SetVolume(vol);//恢复当前音量值
}
}
voidCYLJ_Media_PlayerDlg::OnBUTTONpre()
{
CStringstr;
intindex=m_Sel()-1;//光标减一
if(index<0)index=m_nt()-1;//如果播放完第一曲就自动播放最后一首
m_t(index,str);//获得当前光标所指的路径字符串
m_(str);//开始播放上一首
m_Sel(index);//自动置光标
}
voidCYLJ_Media_PlayerDlg::OnBUTTONnext()
{
CStringstr;
intindex=m_Sel()+1;//光标加一
if(index>=m_nt())index=0;//如果播放完最后一曲就自动播放第一首
m_t(index,str);//获得当前光标所指的路径字符串
m_(str);//开始播放下一首
m_Sel(index);//自动置光标
}
voidCYLJ_Me离职通知 dia_PlayerDlg::OnBUTTONshow()
{
flag=!flag;
if(flag)SetWindowPos(NULL,0,0,500,520,SWP_NOMOVE);
elSetWindowPos(NULL,0,0,702,520,SWP_NOMOVE);
}
voidCYLJ_Media_PlayerDlg::OnDblclkListMenu()
{
CStringstr;
intindex=m_Sel();
m_t(index,str);
m_(str);
m_PathName=str;
}
voidCYLJ_Media_PlayerDlg::OnBUTTONsave()
{
CStdioFilefile;
CStringstrtemp;
("E:",CFile::modeCreate|CFile::modeReadWrite|CFile::typeText);
for(inti=0;i
{
CStringstrtemp;
m_t(i,strtemp);
strtemp+="n";//换行
tring(strtemp);
}
();
}
voidCYLJ_Media_PlayerDlg::OnBUTTONclear()
{
CStdioFilefile;
m_ontent();
("E:",CFile::modeCreate);
}
voidCYLJ_Media_PlayerDlg::OnReleadcaptureSlider1(NMHDR*pNMHDR,LRESULT*
pResult)
{
m_tings().SetVolume(100-m_());
*pResult=0;
}
voidCYLJ_Media_PlayerDlg::OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)
{
intm_time;
m_time=(int)m_rentMedia().GetDuration();
m_ge(0,m_time);//初始化视频进度滑块
intNewPos;
if((CSliderCtrl*)pScrollBar==&m_jindu)
{
switch(nSBCode)
{
caSB_THUMBTRACK:
m_(nPos);
m_trols().SetCurrentPosition((double)nPos);
break;
caSB_PAGEDOWN:
NewPos=m_();
m_trols().SetCurrentPosition((double)NewPos);
break;
caSB_PAGEUP:
NewPos=m_();
m_trols().SetCurrentPosition((double)NewPos);
break;
}
}
CDialog::OnHScroll(nSBCode,nPos,pScrollBar);
}
voidCYLJ_Media_PlayerDlg::OnTimer(UINTnIDEvent)
{
m_((int)m_trols().GetCurrentPosition());
m_(100-(in科技论文格式范文 t)m_tings().GetVolume());
CDialog::OnTimer(nIDEvent);
}
voidCYLJ_Media_PlayerDlg::OnHelp()
{
CDialogdlg(CAboutDlg::IDD);
l();
}
本文发布于:2023-03-20 23:58:05,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1679327887324144.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:bofangqi.doc
本文 PDF 下载地址:bofangqi.pdf
留言与评论(共有 0 条评论) |