版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学专业课程设计3(面向对象程序设计)课程设计说明书目录1基本功能描述12设计思路13软件设计33.1 设计步骤33.2 界面设计53.3 关键功能的实现93.3.1 “打开”功能的实现93.3.2 “播放”、“暂停”、“停止”功能的实现103.3.3 “上一首”和“下一首”功能实现103.3.4 播放模式选择功能的实现113.3.5 音量滑动条功能的实现123.3.6 播放列表功能的实现134结论与心得体会145参考文献156思考题167 附录177.1调试报告177.1.1 调试一177.1.2 调试二177.2 测试结果187.3 关键源代码19多媒体视频播放器1基本功能描述多媒
2、体视频播放工具是目前计算机必备的一个软件,如大家熟悉的Mediaplayer、Realplayer、金山影霸等。是一种用来播放视频和音频的软件。用VC+软件设计并编写出一个多媒体视频播放器。在设计期间,可以选择使用的多媒体控件,制作与用户交互性较好的应用程序界面。对于控件有多种,可以自己选择。系统能选择打开、播放、暂停、停止音频文件和视频文件,并能控制声音的大小, 可以播放*.mp3、 *.wma、 *.mdi、 *.wav、 *.avi、 *.dat 等格式的多媒体文件。同时还具有自制的播放列表,可以按照列表上的顺序进行一曲、下一曲的播放,并且设定了顺序播放、随机播放、单曲循环三种播放模式以
3、供选择。2设计思路Windows Media Player是一款Windows系统自带的播放器,支持通过插件增强功能。其控件作为本次课设的媒体控件可以满足要求。并且该控件是微软自带的免费控件,通常每个电脑都应有这个控件,方便设计出来的软件在各个电脑运行。在WMP(Windows Media Player的简称)控件里,与多媒体播放器实现功能有关的类有:Cwmpplayer4,Cwmpcontrols,Cwmpmedia,Cwmpplaylist,Cwmpsettings 五大类。其中播放器的一些基本的功能如播放、暂停、快进、快退等主要是调用CWMPControl和Cwmpplayer4类实现的
4、;播放器中播放列表的实现主要是调用Cwmpplaylist类;对于音量的调节以及静音是调用Cwmpsettings和Cwmpplayer4类实现的。除了以上提到的功能的实现,还有打开对话框是调用打开对话框类,筛选文件是调用 szFileFilter()文件过滤函数,获取文件名字和路径是用GetFileName()和GetNextPathName()函数,音量滑动条Slinder是通过对 CSliderCtrl 类实现的。打开程序,初始化从文档中读入文件列表点击“保存列表”List.txt选择格式 char szFileFilter“删除歌曲”和“清除列表”点击“打开”,判断是否符合格式否是获取
5、新文件的路径写给播放列表并传给控件中把打开的对话框关闭计时器,滑块清零并开始计时和运行点击“play”响应CwnpControl类中play函数点击“pause”响应CwnpControl类中pause点击“stop”响应CwnpControl类中stop音量调制获取滑块位置参数返回响应CwnpSetting类中SetVolume图1视频播放器流程图3软件设计设计平台可以是Win32的操作平台上,使用已安装的VC6.0+进行设计和调试。在设计前要确保平台中有WMP控件。结合之前的设计思路,使用 Windows Media Player 等控件来制作多媒体视频播放器。若是Win64这与VC6.0
6、+不兼容,可以选择更高的版本。3.1 设计步骤打开 VC+6.0,点击“新建”,在“新建”窗口选择“工程”选项卡。由于程序是基于对话框的 MFC 应用程序使用 Windows Media Player等控件来制作多媒体视频播放器。设置好地址位置和工程名后点“确定”。这里的工程名字可以是自己的名字拼音缩写,也可以没有任何含义。图2“新建”对话框示意图由于市场上大多数多媒体播放器不能通过鼠标拖拽来改变客户端的大小,这样为了用户使用方便。所以应选择基于对话框的MFC应用程序的模版。接着点击“下一步”,由于其他的设置因与初始设置一样,所以保持所有选项不改变,再次点击“下一步”直到“完成”。图3“MFC
7、 应用程序向导”示意图然后是插入控件,先把系统初始化的按钮用“Delete”删除,在单击鼠标右键选择“插入 ActiveX 控件”,在跳出的对话框中选择“Windows Media Player”(一般当电脑安装了Windows Media Player,其控件也应该存在) ,点击“确定”。图4添加“Windows Media Player”控件示意图虽然已经插入控件了,但这时的控件还不能使用,因为控件的各种类并没有一起加入工程类中。右击鼠标,选择“建立类向导”,这时系统跳出对话框提示是否加入来自控件的类,直接点击“确定”就可以了。图5“Windows Media Player”控件类添加示意
8、图接着对控件关联变量,右击加入的WMP控件,点击“属性”,把ID改为“IDC_player”,然后打开“建立类向导”点到“Member Variables”页面向IDC_player添加变量。单击“ADD Variables”,会弹出图6所示的“Add member name”对话框,命名为“m_player”,设为控制“Control”型,点击“OK” 。图6变量命名示意图3.2 界面设计对于一般多媒体播放器的要求,系统能选择打开、播放、暂停、停止音频文件和视频文件,并能控制声音的大小,并根据自己的设计思路添加表中的按钮和相应的函数,其中函数的响应大多是对鼠标左键单击的响应。并且有序简洁的安
9、排按钮的位置以及分类,使用户方便地使用软件。表1控件 ID 以及对应响应函数表按钮 ID 控件 Caption消息响应函数类型IDC_OPEN打开OnOpen()命令按钮IDC_PLAY播放OnPlay()命令按钮IDC_PAUSE暂停OnPause()命令按钮IDC_STOP停止OnStop()命令按钮IDC_FASTFORWAR快进OnFastforward()命令按钮IDC_FASTREVERSE快退OnFastreverse()命令按钮IDC_BUTTONPRE上一曲OnButtonpre()命令按钮IDC_BUTTONNEXT下一曲OnButtonnext()命令按钮IDC_MUTE
10、静音OnMute()命令按钮IDCANCEL退出无命令按钮IDC_list隐藏/展开Onlist()命令按钮IDC_save保存列表Onsave()命令按钮IDC_ClearOne删除歌曲OnClearOne() 命令按钮IDC_ClearAll清空列表OnClearAll()命令按钮OnRadio1顺序播放无单选框OnRadio2随机播放无单选框OnRadio3循环播放无单选框然后是加入一些关联变量的控件,之前加入了WMPlayer,还要加入类别为“滑块”的Slinder来当调节声音的滑块,还有加入类别为“列表框”的List Control来充当播放列表。表2控件 ID 以及关联变量表按钮I
11、D控件 Caption变量名称类型IDC_playerWMPlayerm_playerCWMPlayer4IDC_SlinderSlinderm_SlinderCSliderCtrlIDC_LIST1List Controlm_ListCtrlCListBox在按钮对应的消息响应函数中写程序将要用到表2的变量和WMP控件中的5个类的函数。在这五个类中:Cwmpplayer4 类主要是关于对其他类的对象的调用以及基本的控件功能的实现,是WMP控件函数与外部交流的桥梁,不可缺少。宁外其部分成员函数还能够进一步获取得到其他相关类对象的实例; Cwmpcontrols 类主要是对控件的更多的操作,例如
12、播放、暂停;Cwmpmedia 类主要是对于媒体文件资源的一些操作,例如获取路径和名称;Cwmpplaylist类主要是关于播放列表的操作;Cwmpsettings 类主要是对于媒体文件中的一些基本设置的操作。对WMP控件中的五个类中函数的使用不能直接使用,而是通过生成的对象来进行调用,所以对象应在“shifanDlg.h”定义,同时类对应的头文件也要在“shifanDlg.h”中用include包含,否则找不到类。若要对对象和变量初始化则应该在“shifanDlg.cpp”中的“CShifanDlg:OnInitDialog()”函数。表3其他类及对应对象表类名头文件名对象名 CWMPCon
13、trolsWmpcontrols.hm_ControlCWMPSettingswmpsettings.hm_SettingCWMPMediawmpmedia.hm_MediaCWMPPlaylistwmpplaylist.hm_Playlist另外还有一些变量虽然没有实际多用,但判断函数是否静音,列表是否展开等需使用。定义也在“shifanDlg.h”中。表4其他数据定义 数据类型变量名数据类型变量名CStringm_FileNameintflagCStringm_PathNameintvol除了对各个控件关联变量以及消息响应函数,还要对对话框类进行消息响应函数的关联,如当一首歌播放完后的模式
14、选择。应用到 WM_TIMER 消息响应函数以及SetTimer()和KillTimer()函数,如图建立OnTimer函数。图7添加“WMTIMER”消息函数示意图还有菜单的设计,其相对简单,只要名称和ID与表1保持一致就可以了。在“Resource File”中右击鼠标添加“MENU”,属性为“IDR_MENU1”。但是菜单并未与对话窗口有实质联系,需要将菜单加入到“IDD_SHIFAN_DIALOG”中来,在 “IDD_SHIFAN_DIALOG”窗口空白右键单击,选中菜单“IDR_MENU1”,这样便完成了对菜单的加载。图8控件按钮分布图编译运行程序后得到了初步的界面效果图,当然还没有
15、加入函数。同时在左上角会显示自己写的工程名“shifan”,如图8所示。3.3 关键功能的实现对于各个按钮、列表功能的实现主要是通过对各个函数加入相应的代码,下文将列出相应的关键代码。3.3.1 “打开”功能的实现“打开”按钮主要是实现了对打开的文件进行过滤,主要使用了szFileFilter()函数。点击确定时,首先是把文件路径传给播放列表中,列表在从文件路径中提取文件名来显示。然后又把文件路径通过SetUrl()交给控件读取播放。void CShifanDlg:OnOpen() char szFileFilter="媒体文件(*.avi,*.mp3,*.wma)|*.avi;*.
16、mp3;*.wma|"/过滤文件 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_FileName=dlg.GetFileName();/获取文件名 geminghelu
17、jing/* m_ListCtrl*/.AddString(m_PathName);/向列表添加文件路径 m_ListCtrl.AddString(m_PathName); m_player.SetUrl(m_PathName); /读取路径开始播放 SetTimer(1,1000,NULL);/播放开始的时候就创建计时器 3.3.2 “播放”、“暂停”、“停止”功能的实现其实3.3.1中提到一种播放方法使用了SetUrl()函数来实现。这里使用了另外一种方法。void CShifanDlg:OnPlay() CWMPControls m1; m1=m_player.GetControls()
18、; m1.play(); “暂停”和“停止”功能实现方法和播放差不多,只是使用的m1中函数改变了。void CShifanDlg:OnPause() CWMPControls m1; m1=m_player.GetControls(); m1.pause(); void CShifanDlg:OnStop() CWMPControls m1; m1=m_player.GetControls(); m1.stop(); 3.3.3 “上一首”和“下一首”功能实现“上一首”就是让光标往上移一行,也就是对应的光标变量(index)减去1。当要判断光标在第一行的情况,也就是index=0的时候,这时光
19、标应移到最后一首歌曲或视频上。void CShifanDlg:OnButtonpre() CString str; int index=m_ListCtrl.GetCurSel()-1;/光标减一 if(index<0) index=m_ListCtrl.GetCount()-1;/如果播放完第一曲就自动播放最后一首 m_ListCtrl.GetText(index,str);/获得当前光标所指的路径字符串 m_player.SetUrl(str);/开始播放上一首 m_ListCtrl.SetCurSel(index);/自动置光标 其“下一首”和“上一首”大同小异,只不过index应
20、加1,在光标为最后一行时应判断移动到第一行。3.3.4 播放模式选择功能的实现这里有三种播放模式:“顺序播放”、“随机播放”、“单曲循环”。这三种模式的实现是在OnTimer()一个时间消息响应函数的实现的。先判断一个文件播放完毕后,再分别判断OnRadio1、OnRadio2和OnRadio3对应的按钮是否按下,若有按钮按下就进入到对应的if语句中。顺序播放就是int index=m_ListCtrl.GetCurSel()+1跟上一首相同;随机播放先是用srand(time(0)来每次都能产生不同的随机数序列,再用rand()%m_ListCtrl.GetCount()产生随机光标;循环播
21、放是m_ListCtrl.GetText(m_ListCtrl.GetCurSel(),m_PathName)实现的。void CShifanDlg:OnTimer(UINT nIDEvent) int index=m_player.GetPlayState();/播放状态 if(index=1)/如果播放完成 if(CButton *)GetDlgItem(OnRadio1)->GetCheck()/如果是顺序播放 CString str; int index=m_ListCtrl.GetCurSel()+1; if(index>=m_ListCtrl.GetCount() in
22、dex=0; m_ListCtrl.GetText(index,str); m_player.SetUrl(str); m_ListCtrl.SetCurSel(index);/自动置光标 /这样就实现了顺序播放 if(CButton *)GetDlgItem(OnRadio2)->GetCheck()/随机播放 srand(time(0);/目的在于每次都能产生不同的随机数序列 m_ListCtrl.SetCurSel(rand()%m_ListCtrl.GetCount();/随机置光标 m_ListCtrl.GetText(m_ListCtrl.GetCurSel(),m_Path
23、Name); m_player.SetUrl(m_PathName); if(CButton *)GetDlgItem(OnRadio3)->GetCheck()/单曲循环 m_ListCtrl.GetText(m_ListCtrl.GetCurSel(),m_PathName); m_player.SetUrl(m_PathName); CDialog:OnTimer(nIDEvent);3.3.5 音量滑动条功能的实现音量滑动条是区别于其他命令按钮的,它是滑块,所以相应的是Customdraw类型,是调用 CSliderCtrl 控件的 m_slinder 变量来实现的。音量调节函数
24、主要是使用一个嵌套函数“m_WMPlayer.GetSettings().SetVolume(m_slinder.GetPos();”实现的。设置音量用的是“SetVolume()”函数。在“OnInitDialog()”函数中已对滑块范围进行初始化m_slinder.SetRange(0,100)。使音量变化范围为0100。void CShifanDlg:OnCustomdrawSlinder(NMHDR* pNMHDR, LRESULT* pResult) UpdateData(true); m_player.GetSettings().SetVolume(m_Slinder.GetPos
25、(); UpdateData(false); *pResult = 0;另外静音程序如下,在静音之前先判断该系统音量是否为0,若为0则系统则会恢复音量;若不为0,则把系统音量保存在vol(在shifanDLG.h中已定义了)中,等恢复时使用。void CShifanDlg:OnMute() n=!n; if(!n)vol=m_player.GetSettings().GetVolume();/ 获取当前音量值 m_player.GetSettings().SetVolume(0);/设为静音 else m_player.GetSettings().SetVolume(vol);/恢复当前音量值
26、 3.3.6 播放列表功能的实现播放列表主要有“隐藏/展开”、“保存列表”、“删除列表”、“清空列表” 这四个功能。这个列表的四个功能实现前提是在工程的文件夹里新建一个txt文档并命名为“list.txt”。文档可以保存播放文件列表使在下次打开时可自动的生成播放列表。下面是“保存列表”的函数。void CShifanDlg:Onsave() CStdioFile file;/定义文本 file.Open(".list.txt",CFile:modeCreate|CFile:modeReadWrite|CFile:typeText);/创建文本 for(int i=0;i&l
27、t;m_ListCtrl.GetCount();i+) CString strtemp; m_ListCtrl.GetText(i,strtemp);/获得文本中的内容 strtemp+="n"/需要换行 file.WriteString(strtemp);/将获得内容写入列表 file.Close(); 然后是“隐藏/展开”功能,其实就是在重新设置窗口大小,若展开则恢复原来的窗口大小,这里使用了SetWindowPos()函数。void CShifanDlg:Onlist() / TODO: Add your control notification handler co
28、de here flag=!flag; if(!flag) SetWindowPos(NULL,0,0,560,480,SWP_NOMOVE); else SetWindowPos(NULL,0,0,730,480,SWP_NOMOVE); 最后是“删除歌曲”和“清除列表”,使用了“DeleteString()”来删除播放列表中的代表文件路径的字符串。用“ResetContent()”直接清除列表。同时不管那种功能,执行完成后要保存列表,这样才能使播放列表与list.txt同步。4结论与心得体会经过这次课程设计,我对MFC又有了更深的了解,同时在不断编写中也巩固了课堂上学的MFC的各种知识。对
29、于这次课程设计的选题,我还是根据自己的兴趣爱好选得。所以在做课设时,自己查找资料和尝试自己的编写方法都比较主动。我平时很喜欢听歌,但听着听着收藏的歌曲越来越多,我用过一些很火的听歌软件,但都觉得其管理歌曲的方式不完善。所以当我学习面向对象编程时,我就想以后自己做一个听歌软件,正好在我们面向对象课程设计中有一个多媒体播放器,可以为我自己听歌软件打好基础。在一开始选这个课题时,我和其他同学都觉得很难。不像简单计算器和画图软件等课题曾在上课提到过,对于多媒体播放器我看到看到了题目不知道该怎样做。写构思时无处下笔,也没有一点头绪。后来在老师的讲解中知道要用多媒体的控件来间接控制播放多媒体文件,还提到只
30、要知道控件的类的使用,这个课题还是很简单的。然后我和同组的同学在网上找相应的资料,找到怎样在VC+6.0里加入控件,各个控件的说明书。进过比较和分析,我们一致采用Windows Media Player多媒体软件旗下的控件WMP控件。因为WMP控件本身就是微软自带的控件,不存在兼容问题。还有每个电脑多都有Windows Media Player播放器,其控件也都注册了。知道怎样使用WMP控件,就可以很轻松地完成软件流程图的设计。我和同学一起讨论了半天,终于大致理清了流程然后各自画自己独特的流程图了。软件编写有时也会遇到许多问题,好多有自己的思路但不知道怎样实现,用什么函数可以达到这种效果。所以
31、编写的时候也是不端的查找资料,不断的讨论和尝试。我从中学到了很多有用的知识。最后终于变好了,编写的软件可以满足课程设计给出的要求。系统能选择打开、播放、暂停、停止音频文件和视频文件,并能控制声音的大小, 可以播放*.mp3、 *.wma、 *.mdi、 *.wav、 *avi、 *dat 等格式的多媒体文件。并且我又在课设的要求上给多媒体播放器添加了快进快退的功能,以及删除播放列表选中歌曲的功能。一是为了迎合市场上各类媒体播放软件的趋势,二也是使自己用的方便,同时挑战自己的能力。不过经过以上功能的实现,其他功能也是熟能生巧,比较简单。总的看来,通过这次课程设计,我的能力得到了明显的提高,无论是
32、动手能力还是团队合作能力,但我认为更重要的是对软件的编程有了大体的了解,这样就可以在以后工作中有所必备的综合素质。以前总感觉设计东西是一件多么复杂困难的事情,自己根本不能胜任。但这一次的课程设计我却亲身经历和设计多媒体播放器。5参考文献1揣锦华.面向对象程序设计与 VC+实践M.西安电子科技大学出版社.20052郑阿奇.Visual C+教程M.北京:机械工业出版社.20044周长发.Visual C+.NET 多媒体编程M.电子工业出版社.20025Steve Mack.流媒体宝典.电子工业出版社.20036王育坚.Visual C+面向对象编程教程.第 2 版.北京:清华大学出版社,200
33、86思考题1) 控件自带的类和本程序中的类是如何共同作用的?答:控件自带的的类对被对话框程序调用,当然不能直接调用,应该在对话框中头文件中(例如shifanDLG.h)通过控件类生成对应的对象,这样在调用时,直接调用对象中的函数就行了。调用了控件类中的函数后,还需要调用对话框自身的函数,比如消息及消息响应函数等函数,以及各控件对应的消息响应函数。如此便可以实现控件自带类和本程序中的类的共同作用。2) 说明程序中调用的控件函数的作用?答:控件的不同类有不同的函数与之对应,不同函数有不同的功能。其函数功能见表。表5控件函数和对应的功能功能控件函数功能控件函数打开OnOpen()播放模式OnTime
34、r()播放OnPlay()停止 OnButtonStop()暂停OnButtonPause()上一首 OnButtonPre()快进OnFastforwa下一首OnButtonNext()快退OnFastreverse()保存列表Onsave()声音滑块OnCustomdrawSlider() 清空列表Ondelist()7 附录7.1调试报告7.1.1 调试一在调试播放列表时,看到播放列表中显示了路径感觉没有必要,所以修改了代码使只把歌曲名给了代码。但这样再来播放列表上的歌曲时不能播放。图9调试一的说明图原因:是因为播放列表上只有歌曲名,没了路径的话是不能找到文件的,所以不能播放。所以解决方
35、法是修改代码使其把歌曲路径递给播放列表。但后来听老师的解说,可以通过取字符串函数来从路径里取文件名。即播放列表中储存的是路径,但显示的是路径中文件名。7.1.2 调试二在实现“删除歌曲”和“清除歌曲”时,发现一个问题:虽然这两个命令按钮的确有该功能。但在重新打开软件时,并没有反应到新的播放列表中。原因:在函数OnClearOne()和OnClearAll()最后没有Onsave()函数,所以在执行该功能时,其功能并没有反应到txt文档中。修改的程序如下:void CShifanDlg:OnClearOne() / TODO: Add your control notification hand
36、ler code herem_ListCtrl.DeleteString(m_ListCtrl.GetCurSel();/删除当前光标所选择的行Onsave();/自动保存删除某一行后的播放列表 这是修改的地方7.2 测试结果编写好的软件能选择打开、播放、暂停、停止音频文件和视频文件,并能控制声音的大小, 可以播放*.mp3、 *.wma、 *.mdi、 *.wav、 *avi、 *dat 等格式的多媒体文件。同时还具有自制的播放列表,可以按照列表上的顺序进行一曲、下一曲的播放,同时还有保存列表和删除歌曲的作用,并且设定了顺序播放、随机播放、单曲循环三种播放模式以供选择。图10播放器播放音乐展
37、示图11播放器隐藏列表展示7.3 关键源代码/播放模式选择void CShifanDlg:OnTimer(UINT nIDEvent) int index=m_player.GetPlayState();/播放状态 if(index=1)/如果播放完成 if(CButton *)GetDlgItem(OnRadio1)->GetCheck()/如果是顺序播放 CString str; int index=m_ListCtrl.GetCurSel()+1; if(index>=m_ListCtrl.GetCount() index=0; m_ListCtrl.GetText(inde
38、x,str); m_player.SetUrl(str); m_ListCtrl.SetCurSel(index);/自动置光标 /这样就实现了顺序播放 if(CButton *)GetDlgItem(OnRadio2)->GetCheck()/随机播放 srand(time(0);/目的在于每次都能产生不同的随机数序列 m_ListCtrl.SetCurSel(rand()%m_ListCtrl.GetCount();/随机置光标 m_ListCtrl.GetText(m_ListCtrl.GetCurSel(),m_PathName); m_player.SetUrl(m_PathN
39、ame); if(CButton *)GetDlgItem(OnRadio3)->GetCheck()/单曲循环 m_ListCtrl.GetText(m_ListCtrl.GetCurSel(),m_PathName); m_player.SetUrl(m_PathName); CDialog:OnTimer(nIDEvent);/下一首void CShifanDlg:OnButtonnext() CString str; int index=m_ListCtrl.GetCurSel()+1; /光标加一 if(index>=m_ListCtrl.GetCount() index
40、=0;/如果播放完最后一曲就自动播放第一首 m_ListCtrl.GetText(index,str); /获得当前光标所指的路径字符串 m_player.SetUrl(str); /开始播放下一首 m_ListCtrl.SetCurSel(index);/自动置光标 /上一首void CShifanDlg:OnButtonpre() CString str; int index=m_ListCtrl.GetCurSel()-1;/光标减一 if(index<0) index=m_ListCtrl.GetCount()-1;/如果播放完第一曲就自动播放最后一首 m_ListCtrl.Ge
41、tText(index,str);/获得当前光标所指的路径字符串 m_player.SetUrl(str);/开始播放上一首 m_ListCtrl.SetCurSel(index);/自动置光标 /打开void CShifanDlg:OnOpen() char szFileFilter="媒体文件(*.avi,*.mp3,*.wma)|*.avi;*.mp3;*.wma|"/过滤文件 CFileDialog dlg (true,NULL,NULL,OFN_HIDEREADONLY| OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR,szFileFil
42、ter); POSITION pos=dlg.GetStartPosition(); if(dlg.DoModal()=IDOK)/点击确定添加文件 while(pos!=NULL) m_PathName=dlg.GetNextPathName(pos);/获取文件路径 m_FileName=dlg.GetFileName();/获取文件名 m_ListCtrl.AddString(m_PathName); m_player.SetUrl(m_PathName); /读取路径开始播放 SetTimer(1,1000,NULL);/播放开始的时候就创建计时器 /暂停void CShifanDlg
43、:OnPause() CWMPControls m1; m1=m_player.GetControls(); m1.pause(); /播放void CShifanDlg:OnPlay() CWMPControls m1; m1=m_player.GetControls(); m1.play(); /停止void CShifanDlg:OnStop() CWMPControls m1; m1=m_player.GetControls(); m1.stop(); /调节声音void CShifanDlg:OnCustomdrawSlinder(NMHDR* pNMHDR, LRESULT* pResult) UpdateData(true); m_player.GetSettings().S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省珠海市2025届高考语文押题试卷含解析
- 黑龙江省黑河市2025届高考临考冲刺英语试卷含解析
- 2025届北京市西城区鲁迅中学高考考前提分语文仿真卷含解析
- 2024年实习协议书模板
- 银川市重点中学2025届高三第五次模拟考试语文试卷含解析
- 2024年度工程智能化建设合同2篇
- 2024年度北京市国家电网招聘之机械动力类强化训练试卷A卷附答案
- 2024年度北京市国家电网招聘之法学类押题练习试卷B卷附答案
- 甘肃省兰州市兰炼一中2025届高三考前热身数学试卷含解析
- 2025届江苏省常州市教育学会高三第四次模拟考试语文试卷含解析
- 葡萄酒-侍酒课件
- 剪映入门教程课件
- 焊接工艺评定报告模板
- 华文文学上课课件
- 初中英语公开课评课用语优缺点及建议(十三篇)
- 医院器械科呼吸机巡查表
- 软件测试PPT完整全套教学课件
- 云南省大理州住房公积金管理中心选调事业单位工作人员考试真题2022
- 全广州版英语六年级上册单词带音标
- 面神经炎面瘫的针灸康复治疗思路课件
- 2023年甘肃省普通高中学业水平合格性考试物理试题(七)
评论
0/150
提交评论