(精选)多媒体视频播放器_第1页
(精选)多媒体视频播放器_第2页
(精选)多媒体视频播放器_第3页
(精选)多媒体视频播放器_第4页
(精选)多媒体视频播放器_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录多媒体视频播放器11基本功能描述12设计思路13软件设计23.1 设计步骤33.2 界面设计63.3 关键功能的实现93.3.1 “打开”功能的实现93.3.2 “播放”、“暂停”、“停止”“全屏”功能的实现103.3.3 “上一首”和“下一首”功能实现123.3.4 音量滑动条功能的实现123.3.5 播放列表功能的实现143.3.6 进度滑动条功能的实现154结论与心得体会165参考文献176思考题187 附录187.1调试报告187.1.1 调试一187.1.2 调试二197.2 测试结果207.3 关键源代码21多媒体视频播放器1基本功能描述多媒体视频播放工具是目前计算机必备的一个

2、软件,比较流行的有 Real Player、Windows Media Player 以及国产暴风影音等,能够播放 RM、RMVB、MP3、MPEG、DAT 等多种格式的视频文件 mp3、wma、mdi、wav、avi、dat 等格式的音频文件。用VC+软件设计并编写出一个多媒体视频播放器。在设计期间,可以选择使用的多媒体控件,制作与用户交互性较好的应用程序界面。对于控件有多种,可以自己选择。本次课程设计要使用 VC+6.0 内部的 ActiveX 控件Windows Media Player 控件,建立自己的多媒体播放器。此多媒体播放器具有打开文件、播放、暂停、停止、关闭、全屏、音量滑块调节

3、、进度滑块调节、快进、快退、显示隐藏播放列表等基本功能, 可以播放*.mp3、 *.wma、 *.mdi、 *.wav、 *.avi、 *.dat、 *.mpg、*.rmvb等格式的多媒体文件。同时还具有自制的播放列表,可以按照列表上的顺序进行一曲、下一曲的播放。2设计思路Windows Media Player是一款Windows系统自带的播放器,支持通过插件增强功能。其控件作为本次课设的媒体控件可以满足要求。并且该控件是微软自带的免费控件,通常每个电脑都应有这个控件,方便设计出来的软件在各个电脑运行。根据 Windows Media Player 和各个按钮控件功能的特点,首先要在初始化中

4、对CWMPControl,CWMPSettings,CWMPPlaylist,CWMPMedia 等类的对象进行绑定和定义。播放器的一些基本的功能如播放、暂停、全屏、静音、快进、快退等主要是调用 CWMPControl 和 CWMPPlayer 类中的成员函数来进行实现。对于打开按钮,需要调用通用文件对话框类,调用 szFileFilter()文件过滤函数和 GetFileName()获取文件名函数。除了以上提到的功能的实现,还有进度滑条Slider_progress和音量滑动条Slider2是通过对 CSliderCtrl 类实现的。音量滑块50,新建list.txt,计时器开启打开程序点击

5、“保存列表”初始化 List.txt点击“打开”选择文件显示在list.txt中删除列表双击列表框中内容或选中单击“播放”开始播放OnTimer()音量调节点击“快进”点击“下一首”点击“停止”点击“暂停/继续”获取位置参数返回响应CwnpSetting类中的Setvolume响应CwnpControl类中的fastForward函数获取当前播放位置返回给进度条滑块的SetPos获取音量返回SetPosint idex=当前光标位置加1,读取idex中文本,返回SetUrl函数响应CwnpControl类中的stop函数响应CwnpControl类中的pause函数和play函数图1视频播放器

6、流程图3软件设计设计平台可以是Win32的操作平台上,使用已安装的VC6.0+进行设计和调试。在设计前要确保平台中有WMP控件。结合之前的设计思路,使用 Windows Media Player 等控件来制作多媒体视频播放器。若是Win64这与VC6.0+不兼容,可以选择更高的版本。3.1 设计步骤打开 VC+6.0,点击“新建”,在“新建”窗口选择“工程”选项卡。由于程序是基于对话框的 MFC 应用程序使用 Windows Media Player等控件来制作多媒体视频播放器。设置好地址位置和工程名后点“确定”。这里的工程名字可以是自己的名字拼音缩写,也可以没有任何含义。图2“新建”对话框示

7、意图在点击“确定”后进入到了“MFC 应用程序向导步骤1”的设置界面,选择“基本对话框”,然后点击“下一步”。图3“MFC 应用程序向导”示意图在剩下的3个步骤中,全部选择默认的设置,不要做随意更改,直至“完成”便实现了对话框的创建。然后是插入控件,先把系统初始化的按钮用“Delete”删除,在单击鼠标右键选择“插入 ActiveX 控件”,在跳出的对话框中选择“Windows Media Player”(一般当电脑安装了Windows Media Player,其控件也应该存在) ,点击“确定”。图4添加“Windows Media Player”控件示意图虽然已经插入控件了,但这时的控件还

8、不能使用,因为控件的各种类并没有一起加入工程类中。右击鼠标,选择“建立类向导”,这时系统跳出对话框提示是否加入来自控件的类,直接点击“确定”就可以了。图5“Windows Media Player”控件类添加示意图接着对控件关联变量,右击加入的WMP控件,点击“属性”,把ID改为“IDC_player”,然后打开“建立类向导”点到“Member Variables”页面向IDC_player添加变量。单击“ADD Variables”,会弹出图6所示的“Add member name”对话框,命名为“m_player”,设为控制“Control”型,点击“OK” 。图6变量命名示意图关联变量之

9、后才算是真正的添加了该控件,可以发现在关联变量之后,控件工具栏多了“Windows Media Player”控件的选项,并且在“Source Files”中增加了17个类,相应的头文件也增加了17个,其中最主要的类为 Cwmpplayer4,Cwmpcontrols,Cwmpmedia,Cwmpsettings 四个大类。 Cwmpplayer4 类主要是关于对其他类的对象的调用以及基本的控件功能的实现,提供了与 Windows Media Player 控件进行交互的基本方法,其中部分成员函数还能够进一步获取得到其他相关类对象的实例;Cwmpcontrols 类主要是对控件的更多的操作;C

10、wmpmedia 类主要是对于媒体文件资源的一些操作; Cwmpsettings 类主要是对于媒体文件中的一些基本设置的操作。3.2 界面设计首先是打开按钮,用于媒体文件的打开;然后依次是播放、暂停、停止、快进、快退、静音、全屏、退出、上一首、下一首、显示/隐藏按钮,以及视频进度滑块和音量滑块条 Slider 控件。对控件主要进行变量的关联,以及 ID 的修改,对于普通按钮进行ID修改,结果如下下表1、表2、表3和表4所示。表1控件 ID 以及对应响应函数表按钮 ID 控件 Caption消息响应函数类型IDC_BUTTON_open打开OnBUTTONopen()命令按钮IDC_BUTTON

11、_fullscreen全屏OnBUTTONfullscreen()命令按钮IDC_BUTTON_play播放OnBUTTONplay()命令按钮IDC_BUTTON_panse暂停/播放OnBUTTONpanse()命令按钮IDC_BUTTON_stop停止OnBUTTONstop()命令按钮IDC_BUTTON_fastforward快进OnBUTTONFastforward()命令按钮IDC_BUTTON_fasteverse快退OnBUTTONfasteverse()命令按钮IDC_BUTTON_pre上一曲OnBUTTONpre()命令按钮IDC_BUTTON_next下一曲OnBUT

12、TONnext()命令按钮IDC_BUTTON4_mute静音OnBUTTON4mute()命令按钮IDCANCEL退出无命令按钮IDC_BUTTON_show隐藏/展开OnBUTTONshow()命令按钮IDC_BUTTON_save保存列表OnBUTTONsave()命令按钮IDC_BUTTON_clear删除列表OnBUTTONclear()命令按钮然后是加入一些关联变量的控件,之前加入了WMPlayer,还要加入类别为“滑块”的Slider来当调节声音的滑块,还有加入类别为“列表框”的List Control来充当播放列表。表2控件 ID 以及关联变量表按钮ID控件 Caption变量

13、名称类型IDC_OCX1WMPlayerm_playerCWMPlayer4IDC_SLIDER_progressSliderm_jinduCSliderCtrlIDC_SLIDER_volSliderm_volCSliderCtrlIDC_LIST_MENUList Controlm_list2CListBox在按钮对应的消息响应函数中写程序将要用到表2的变量和WMP控件中的5个类的函数。在这五个类中:Cwmpplayer4 类主要是关于对其他类的对象的调用以及基本的控件功能的实现,是WMP控件函数与外部交流的桥梁,不可缺少。宁外其部分成员函数还能够进一步获取得到其他相关类对象的实例; Cw

14、mpcontrols 类主要是对控件的更多的操作,例如播放、暂停;Cwmpmedia 类主要是对于媒体文件资源的一些操作,例如获取路径和名称;Cwmpplaylist类主要是关于播放列表的操作;Cwmpsettings 类主要是对于媒体文件中的一些基本设置的操作。表3其他类及对应对象表类名头文件名对象名 CWMPControlsWmpcontrols.hm_ControlCWMPSettingswmpsettings.hm_SettingCWMPMediawmpmedia.hm_MediaCWMPPlaylistwmpplaylist.hm_Playlist表4其他数据定义 数据类型变量名数据

15、类型变量名CStringm_FileNameBOOLflag,flag2,nCStringm_PathNameintvol除了对各个控件关联变量以及消息响应函数,还要对对话框类进行消息响应函数的关联,如当一首歌播放完后的模式选择。应用到 WM_TIMER 消息响应函数以及SetTimer()和KillTimer()函数,如图建立OnTimer函数。图7添加“WMTIMER”消息函数示意图还有菜单的设计,其相对简单,只要名称和ID与表1保持一致就可以了。在“Resource File”中右击鼠标添加“MENU”,属性为“IDR_MENU1”。但是菜单并未与对话窗口有实质联系,需要将菜单加入到“I

16、DD_SHIFAN_DIALOG”中来,在 “IDD_SHIFAN_DIALOG”窗口空白右键单击,选中菜单“IDR_MENU1”,这样便完成了对菜单的加载。图8控件按钮分布图编译运行程序后得到了初步的界面效果图,当然还没有加入函数。同时在左上角会显示自己写的工程名“YLJ_Media_Player”,如图8所示。3.3 关键功能的实现对于各个按钮、列表功能的实现主要是通过对各个函数加入相应的代码,下文将列出相应的关键代码。3.3.1 “打开”功能的实现“打开”按钮主要是实现了对打开的文件进行过滤,主要使用了szFileFilter()函数。点击确定时,首先是把文件路径传给播放列表中,列表在从

17、文件路径中提取文件名来显示。然后又把文件路径通过SetUrl()交给控件读取播放。void CYLJ_Media_PlayerDlg:OnBUTTONopen() char szFileFilter="所有支持类型|*.mp3;*.mp4;*.wma;*.dat;*.wav;*.avi;*.mov;*.rmvb;*.mmm;*.mid;*.rmi;*.mpeg;*.mpg|" "Mp3 File(*.mp3)|*.mp3|" "Mp4 File(*.mp4)|*.mp4|" "Wma File(*.wma)|*.wma|&q

18、uot; "Video File(*.dat)|*.dat|" "Wave File(*.wav)|*.wav|" "AVI File(*.avi)|*.avi|" "Movie File(*.mov)|*.mov|" "Rmvb File(*.rmvb)|*.rmvb|" "Media File(*.mmm)|*.mmm|" "Mid File(*.mid;*,rmi)|*.mid;*.rmi|" "MPEG File(*.mpeg)|*.mp

19、eg|" "MPG File(*.mpg)|*.mpg|" "All File(*.*)|*.*|"/文件类型过滤 CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); POSITION pos=dlg.GetStartPosition(); if(dlg.DoModal()=IDOK) while(pos!=NULL) m_PathName=dlg.GetNextPathName(pos); m_list2.AddString(m_PathName); 3.3.2 “播放

20、”、“暂停”、“停止”“全屏”功能的实现其实和3.3.1中提到一种播放方法一样使用了SetUrl()函数来实现。void CYLJ_Media_PlayerDlg:OnBUTTONplay() CString str;int index=m_list2.GetCurSel();m_list2.GetText(index,str);m_player.SetUrl(str); “暂停”和“停止”功能实现方法和播放差不多,只是使用的m_player.GetControls()中函数改变了。void CYLJ_Media_PlayerDlg:OnBUTTONpanse() flag2=!flag2;i

21、f(flag2) m_player.GetControls().pause();elsem_player.GetControls().play();void CYLJ_Media_PlayerDlg:OnBUTTONstop() m_player.GetControls().stop();全屏功能的实现也是调用SetFullScreen(TRUE)函数来实现。void CYLJ_Media_PlayerDlg:OnBUTTONfullscreen() m_player.SetFullScreen(TRUE);3.3.3 “上一首”和“下一首”功能实现“上一首”就是让光标往上移一行,也就是对应的

22、光标变量(index)减去1。当要判断光标在第一行的情况,也就是index=0的时候,这时光标应移到最后一首歌曲或视频上。void CYLJ_Media_PlayerDlg:OnBUTTONpre() CString str;int index=m_list2.GetCurSel()-1;/光标减一if(index<0) index=m_list2.GetCount()-1;/如果播放完第一曲就自动播放最后一首m_list2.GetText(index,str);/获得当前光标所指的路径字符串m_player.SetUrl(str);/开始播放上一首m_list2.SetCurSel(i

23、ndex);/自动置光标 其“下一首”和“上一首”大同小异,只不过index应加1,在光标为最后一行时应判断移动到第一行。void CYLJ_Media_PlayerDlg:OnBUTTONnext() CString str;int index=m_list2.GetCurSel()+1; /光标加一if(index>=m_list2.GetCount() index=0;/如果播放完最后一曲就自动播放第一首m_list2.GetText(index,str); /获得当前光标所指的路径字符串m_player.SetUrl(str); /开始播放下一首m_list2.SetCurSel

24、(index);/自动置光标3.3.4 音量滑动条功能的实现音量滑动条是区别于其他命令按钮的,它是滑块,是调用 CSliderCtrl 控件的 m_vol 变量来实现的。音量调节函数主要是使用一个嵌套函数“m_player.GetSettings().SetVolume(100-m_vol.GetPos();”实现的。设置音量用的是“SetVolume()”函数。在“OnInitDialog()”函数中已对滑块范围进行初始化CSliderCtrl* pSlide1 =(CSliderCtrl*) GetDlgItem(IDC_SLIDER1);pSlide1->SetRange(0, 1

25、00); 使音量变化范围为0100。void CYLJ_Media_PlayerDlg:OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult) m_player.GetSettings().SetVolume(100-m_vol.GetPos();*pResult = 0;另外静音程序如下,在静音按钮按下后把系统音量保存在vol中,等恢复时使用,再设置为静音,再次按下后取消静音然后恢复开始音量。void CYLJ_Media_PlayerDlg:OnBUTTON4mute() n=!n;if (n)vol=m_player.GetSe

26、ttings().GetVolume();/ 获取当前音量值m_player.GetSettings().SetMute(TRUE);/设为静音elsem_player.GetSettings().SetMute(FALSE);/解除静音m_player.GetSettings().SetVolume(vol);/恢复当前音量值3.3.5 播放列表功能的实现播放列表主要有“隐藏/展开”、“保存列表”、 “清空列表” 这三个功能。这个列表的三个功能实现前提第一次运行程序时会在E盘新建一个txt文档并命名为“list.txt”。初始化函数如下:CStdioFile *fsp=new CStdioF

27、ile("E:list.txt",CFile:modeRead);CString str;while(fsp->ReadString(str)m_list2.AddString(str);fsp->Close();delete fsp;文档可以保存播放文件列表使在下次打开时可自动的生成播放列表。下面是“保存列表”的函数。void CYLJ_Media_PlayerDlg:OnBUTTONsave() / TODO: Add your control notification handler code hereCStdioFile file;CString str

28、temp;file.Open("E:list.txt",CFile:modeCreate|CFile:modeReadWrite|CFile:typeText); for(int i=0;i<m_list2.GetCount();i+)CString strtemp;m_list2.GetText(i,strtemp);strtemp+="n"/换行file.WriteString(strtemp);file.Close();然后是“清除列表”功能,用“ResetContent()”直接清除列表。void CYLJ_Media_PlayerDlg:

29、OnBUTTONclear() CStdioFile file; m_list2.ResetContent(); file.Open("E:list.txt",CFile:modeCreate); file.Close(); 最后是“显示/隐藏”功能,其实就是在重新设置窗口大小,若展开则恢复原来的窗口大小,这里使用了SetWindowPos()函数。void CYLJ_Media_PlayerDlg:OnBUTTONshow() flag=!flag;if(flag) SetWindowPos(NULL,0,0,500,520,SWP_NOMOVE);else SetWin

30、dowPos(NULL,0,0,702,520,SWP_NOMOVE);3.3.6 进度滑动条功能的实现进度条可以时时显示播放的位置,而视频进度滑块的初始化放在OnHScroll()函数中实现。void CYLJ_Media_PlayerDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) int m_time;m_time=(int)m_player.GetCurrentMedia().GetDuration();m_jindu.SetRange(0,m_time);/初始化视频进度滑块int NewPos;if(CSl

31、iderCtrl*)pScrollBar=&m_jindu)switch(nSBCode)case SB_THUMBTRACK:m_jindu.SetPos(nPos);m_player.GetControls().SetCurrentPosition(double)nPos);break;case SB_PAGEDOWN:NewPos=m_jindu.GetPos();m_player.GetControls().SetCurrentPosition(double)NewPos);break;case SB_PAGEUP:NewPos=m_jindu.GetPos();m_playe

32、r.GetControls().SetCurrentPosition(double)NewPos);break;视频进度的控制主要是SB_THUMBTRACK、SB_PAGEDOWN、SB_PAGEUP,三个消息响应即移动滑块、单击滑块右边滑条、单击滑块左边滑条的消息响应来实现视频进度的控制。4结论与心得体会平时我挺喜欢听歌看电影的,当看到老师给的选题中有多媒体视频播放器这个题目,我开始是还是挺激动的,能够自己做一个简单的程序,满足自己的爱好也是挺有成就感的。在一开始选这个课题时,我和其他同学都觉得很难。不像简单计算器和画图软件等课题曾在上课提到过,对于多媒体播放器我看到看到了题目不知道该怎样

33、做。然后我花了大量时间去了解第一步怎么做,分别查找了各个控件基本用法功能,最后选用了 Windows Media Player 控件,因为我vc中只能找到这个与视频有关的控件,于是在网上查了一些关于 Windows Media Player 控件的资料,结果按照网上说的方法来根本无法实现,因为网上都说要先插入17个Windows Media Player 控件相关的类,但是我vc却不照网上那样实现,所以在头两天是在摸索中,耗费了很多时间,最后我先不管第一步,直接插入控件,然后发现关联变量时会有提示要插入17个类,点确定就行,问题就这么解决了。然后我和同组的同学在网上找相应的资料,找到怎样在VC

34、+6.0里加入控件,各个控件的说明书。进过比较和分析,我们一致采用Windows Media Player多媒体软件旗下的控件WMP控件。因为WMP控件本身就是微软自带的控件,不存在兼容问题。还有每个电脑多都有Windows Media Player播放器,其控件也都注册了。知道怎样使用WMP控件,就可以很轻松地完成软件流程图的设计。我结合了自己在网上搜索的资料,做好了整个多媒体播放器的整体设计,确定了软件的框架、主要构件以及构件之间的关联,而后由总体设计逐渐深入完成软件的详细设计和开发过程。编写代码更加有条理,才会更加符合软件工程的标准。整个程序设计我做了两天,每天熬夜到1点多,也学会了不少

35、东西。最后终于变好了,编写的软件可以满足课程设计给出的要求。系统能选择打开、播放、暂停、停止音频文件和视频文件,并能控制声音的大小, 可以播放*.mp3、 *.wma、 *.mdi、 *.wav、 *avi、 *dat 等格式的多媒体文件。看到点击每一个按钮都能有相应的反应,顿时有了一种莫名的成就感,也感觉到自己的汗水得到了回报。纸上得来终觉浅,绝知此事要躬行。要想完成一项作品,并不是想的那样简单,做起来总是会遇到问题的,这时就需要要解决问题的能力和坚持不懈的决心。通过本次试验,我收获了很多,对面向对象程序设计这门课所学的知识有了更好的理解。书山有路勤为径,学海无涯苦作舟。5参考文献1揣锦华.

36、面向对象程序设计与 VC+实践M.西安电子科技大学出版社.20052郑阿奇.Visual C+教程M.北京:机械工业出版社.20043周长发.Visual C+.NET 多媒体编程M.电子工业出版社.20024Steve Mack.流媒体宝典.电子工业出版社.20035王育坚.Visual C+面向对象编程教程.第 2 版.北京:清华大学出版社,20086思考题1) 控件自带的类和本程序中的类是如何共同作用的?答:控件自带的的类肯定会在对话框的主程序中被调用,那么就要在主程序中#include入对应类的头文件。对需要用到的类生成对应的对象以实现类中函数的使用。调用了控件类中的函数后,还需要调用

37、对话框自身的函数,比如消息及消息响应函数等函数,以及各控件对应的消息响应函数。如此便可以实现控件自带类和本程序中的类的共同作用。2) 说明程序中调用的控件函数的作用?答:控件的不同类有不同的函数与之对应,不同函数有不同的功能。其函数功能见表。表5控件函数和对应的功能功能控件函数功能控件函数打开OnBUTTONopen()进度刷新OnTimer()播放OnBUTTONplay()停止 OnBUTTONstop()暂停OnBUTTONpause()上一首 OnBUTTONpre()快进OnBUTTONFastforward下一首OnBUTTONnext()快退OnBUTTONFastreverse

38、()保存列表OnBUTTONsave()声音滑块OnReleasedcaptureSlider1()清空列表OnBUTTONclear()全屏OnBUTTONfullscreen()进度控制OnHScroll()7 附录7.1调试报告7.1.1 调试一运行时错误指明如下如图所示:图9 调试一错误提示错误提示为:use of undefined type 'CWMPControls'。在这行代码中,我用控件变量m_player调用GetControls()函数来获得CWMPControls类的对象以调用该的成员函数pause()函数,根据错误提示可知,我这行代码是写在视图类中,调

39、用pause()属于类外调用,但是该类不认识CWMPControls类,所以要在视图类的最前面要加个头文件#include "wmpcontrols.h"。7.1.2 调试二在调试播放列表时,看到播放列表中显示了路径感觉没有必要,所以修改了代码使只把歌曲名给了代码。但这样再来播放列表上的歌曲时不能播放。图10调试二的说明图原因:是因为播放列表上只有歌曲名,没了路径的话是不能找到文件的,所以不能播放。所以解决方法是修改代码使其把歌曲路径递给播放列表。但后来听老师的解说,可以通过取字符串函数来从路径里取文件名。即播放列表中储存的是路径,但显示的是路径中文件名。7.2 测试结果编

40、写好的软件能选择打开、播放、暂停、停止音频文件和视频文件,并能控制声音的大小,以及播放的进度,可以播放*.mp3、 *.wma、 *.mdi、 *.wav、 *avi、 *dat 等格式的多媒体文件。同时还具有自制的播放列表,可以按照列表上的顺序进行一曲、下一曲的播放,同时还有保存列表和删除歌曲的作用。图11播放器播放音乐展示图12播放器隐藏列表展示7.3 关键源代码void CYLJ_Media_PlayerDlg:OnBUTTONopen() char szFileFilter="所有支持类型|*.mp3;*.mp4;*.wma;*.dat;*.wav;*.avi;*.mov;*

41、.rmvb;*.mmm;*.mid;*.rmi;*.mpeg;*.mpg|""Mp3 File(*.mp3)|*.mp3|""Mp4 File(*.mp4)|*.mp4|""Wma File(*.wma)|*.wma|""Video File(*.dat)|*.dat|""Wave File(*.wav)|*.wav|""AVI File(*.avi)|*.avi|""Movie File(*.mov)|*.mov|""Rmvb Fil

42、e(*.rmvb)|*.rmvb|""Media File(*.mmm)|*.mmm|""Mid File(*.mid;*,rmi)|*.mid;*.rmi|""MPEG File(*.mpeg)|*.mpeg|""MPG File(*.mpg)|*.mpg|""All File(*.*)|*.*|"/文件类型过滤CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);POSITION pos=dlg.GetStart

43、Position();if(dlg.DoModal()=IDOK)while(pos!=NULL)m_PathName=dlg.GetNextPathName(pos);m_list2.AddString(m_PathName);void CYLJ_Media_PlayerDlg:OnBUTTONpanse() flag2=!flag2;if(flag2) m_player.GetControls().pause();elsem_player.GetControls().play();void CYLJ_Media_PlayerDlg:OnBUTTONplay() CString str;in

44、t index=m_list2.GetCurSel();m_list2.GetText(index,str);m_player.SetUrl(str);void CYLJ_Media_PlayerDlg:OnBUTTON4mute() n=!n;if (n)vol=m_player.GetSettings().GetVolume();/ 获取当前音量值m_player.GetSettings().SetMute(TRUE);/设为静音elsem_player.GetSettings().SetMute(FALSE);/解除静音m_player.GetSettings().SetVolume(v

45、ol);/恢复当前音量值void CYLJ_Media_PlayerDlg:OnBUTTONpre() CString str;int index=m_list2.GetCurSel()-1;/光标减一if(index<0) index=m_list2.GetCount()-1;/如果播放完第一曲就自动播放最后一首m_list2.GetText(index,str);/获得当前光标所指的路径字符串m_player.SetUrl(str);/开始播放上一首m_list2.SetCurSel(index);/自动置光标void CYLJ_Media_PlayerDlg:OnBUTTONnex

46、t() CString str;int index=m_list2.GetCurSel()+1; /光标加一if(index>=m_list2.GetCount() index=0;/如果播放完最后一曲就自动播放第一首m_list2.GetText(index,str); /获得当前光标所指的路径字符串m_player.SetUrl(str); /开始播放下一首m_list2.SetCurSel(index);/自动置光标void CYLJ_Media_PlayerDlg:OnBUTTONshow() flag=!flag;if(flag) SetWindowPos(NULL,0,0,500,520,SWP_NOMOVE);else SetWindowPos(NULL,0,0,702,520,SWP_NOMOVE);void CYLJ_Media_PlayerDlg:OnDblclkListMenu() CString str;int index=m_list2.GetCurSel();m_l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论