版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【MFC】基于windowsmediaplayer的音乐播放器如图所示,目前程序能完成添加单曲音乐,音量控制,播放控制,只是播放进度条在定期滑动时会引起音乐间断,初步猜测是线程问题。//2011.10.21经过测试,并非是线程问题,而是程序响应了滑动条OnNMCustomdrawProgress消息,并在此消息中又调整了音乐播放的位置,因此会出现播放反复现象。不过这个错误使得今天学习了MFC多线程编程。/document/viewdoc/?id=1706〃解决办法是在OnNMReleasedcaptureProgress而不是OnNMCustomdrawProgress中响应进度条拖动消息。在定时器中定时更新进度条位置。同时重写PreTranslateMessage消息,在进度条被选中且鼠标左键按下的消息中,killtimer,然后再在鼠标左键弹起的消息响应中,settimer。本程序使用的有CButtonST类,windowsmediaplayeractiveX插件,以及一个实现滑动条透明的MySliderControl类。步骤:以下为windowsmediaplayer插件使用方法(转载)/*Windowsmediaplayer作为MS的官方组件,MSDN上有着比较详细的英文说明,但是该说明却并不是那么让人一目了然。该文就如何操作该组件的几个主要接口以及一些基本功能的实现给与详尽而明白的说明,为使该文尽量简单易懂,本文给出了用windowsmediaplayer控件编写一个简单播放器的基本步骤。首先,创建一个对话框,然后在资源管理器中右击对话框,选择''插入Active控件”一〉选择windowsmediaplayer—〉将控件拉到适合大小一〉右击player控件一〉选择添加变量(m_avPlayer)。此时添加的变量在VS2003中不在时IWMPPlay4了,而是COcx。〃附COcx1.h右击类视图/解决方案一〉添加类一〉选择“Active中的MFC类〃一〉选择windowsmediaplayer<1.0>a选择相应的接口(IWMPMediaIWMPSettingsIWMPControlsIWMPPlaylist等等)生成类。为图方便,我将所有接口都生成了相应的类。为了说明方便,我在对话框中放了几个按钮,分别是:打开,播放,暂停,停止,添加。并在对话框右边添加了一个clistctrl又来显示播放列表。然后在对话框头文件中添加了以下变量:CWMPControlsm_control;CWMPSettingsm_set;CWMPPlaylistm_playlist;CWMPMediam_media;COcx1m_avPlayer;CListCtrlm_listCtrl;一切准备工作就绪,下面就涉及到具体的编程问题了。mediaplayer的主要功能有:播放控制,屏幕显示,播放列表,播放列表集,播放信息显示。其中播放控制又有:打开,开始,暂停,停止,快速播放,倒退等等。1.打开:当选择一个文件打开是,可以直接使用m_avPlayer.put_URL(fileName);为打开按钮添加消息响应函数,在函数中添加如下代码:charszFileFilter[]="Mp3File(*.mp3)|*.mp3|”"MPEGFile(*.mpeg)|*.mpeg|""MediaFile(*.asf)|*.asf|""VideoFile(*.dat)|*.dat|""MPGAFile(*.mpga)|*.mpga|""WaveFile(*.wav)|*.wav|""AVIFile(*.avi)|*.avi|""MovieFile(*.mov)|*.mov|""MidFile(*.mid;*,rmi)|*.mid;*.rmi|""WmaFile(*.wma)|*.wma|""AllFile(*.*)|*.*||";CFileDialogfileDialog(TRUE,NULL,NULL,NULL,szFileFilter,this);if(fileDialog.DoModal()==IDOK){CStringfileName=fileDialog.GetPathName();m_avPlayer.put_URL(fileName);}这样当选择一个播放文件后,mediaplayer就会自动播放该文件了。开始:为了实现播放控制,在OnInitDialog()中添加代码:m_control=static_cast<CWMPControls>(m_avPlayer.get_controls());然后为开始按钮添加消息响应函数,并在函数中添加代码:m_control.play();暂停:m_control.pause();停止:m_control.stop();其他如倒退,快速播放,MSDN上有相应的函数,读者可依次自行解决。到此,一个带有简单播放控制的播放器就完成。下面来实现播放列表。为实现播放列表控制,首先在OnInitDialog()中添加代码:〃创建一个播放列表m_playlist=static_cast<CWMPPlaylist>(m_avPlayer.get_currentPlaylist());然后将打开按钮的消息响应函数改为:charszFileFilter[]="Mp3File(*.mp3)|*.mp3|”"MPEGFile(*.mpeg)|*.mpeg|""MediaFile(*.asf)|*.asf|""VideoFile(*.dat)|*.dat|""MPGAFile(*.mpga)|*.mpga|""WaveFile(*.wav)|*.wav|""AVIFile(*.avi)|*.avi|""MovieFile(*.mov)|*.mov|""MidFile(*.mid;*,rmi)|*.mid;*.rmi|""WmaFile(*.wma)|*.wma|""AllFile(*.*)|*.*||";CFileDialogfileDialog(TRUE,NULL,NULL,NULL,szFileFilter,this);if(fileDialog.DoModal()==IDOK){CStringfileName=fileDialog.GetPathName();〃创建一个媒体m_media=static_cast<CWMPMedia>(m_avPlayer.newMedia(fileName));〃将媒体添加到播放列表m_playlist.appendItem(m_media);〃将列表添加到当前列表,以便实现自动播放m_avPlayer.put_currentPlaylist(m_playlist);m_set=(CWMPSettings)m_avPlayer.get_settings();//参数true设置自动播放,false不设置自动播放m_set.put_autoStart(true);〃将媒体的名字添加到列表控件m_listCtrl.InsertItem(0,m_media.get_name());}接着是屏幕显示控制m_avPlayer.put_fullScreen(true/false);入使用播放列表自动播放文件,第一步:需要在播放列表中添加媒体;第二步:将列表设置为当前播放列表;第三步:将播放设置为自动播放。函数如下:〃创建媒体m_media=static_cast<CWMPMedia>(m_avPlayer.newMedia(fileName));〃将媒体追加到播放列表m_playlist.appendItem(m_media);〃将类别设置为当前列表m_avPlayer.put_currentPlaylist(m_playlist);//设置自动播放m_setting.put_autoStart(true);入播放信息的显示可以通过CWMPMedia类获取相关的媒体信息。获取播放文件名:media.get_name();入其他,如鼠标,接盘事件响应,可添加相应的消息响应函数要注意的是,在添加如鼠标一类的消息时,消息函数有个参数如nButton,它的值为1时是单击鼠标左键,2为单击鼠标右键消息,4为单击鼠标中键。等等。附COcxl.h#pragmaonce//计算机生成了由MicrosoftVisualC++创建的IDispatch包装类//注意:不要修改此文件的内容。如果此类由//MicrosoftVisualC++重新生成,您的修改将被改写。///////////////////////////////////////////////////////////////////////////////COcx1包装类classCOcxl:publicCWnd{protected:DECLARE_DYNCREATE(COcx1)public:CLSIDconst&GetClsid(){staticCLSIDconstclsid={0x6BF52A52,0x394A,0x11D3,{0xB1,0x53,0x0,0xC0,0x4F,0x79,0xFA,0xA6}};returnclsid;}virtualBOOLCreate(LPCTSTRlpszClassName,LPCTSTRlpszWindowName,DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID,CCreateContext*pContext=NULL){returnCreateControl(GetClsid(),lpszWindowName,dwStyle,rect,pParentWnd,nID);}BOOLCreate(LPCTSTRlpszWindowName,DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID,CFile*pPersist=NULL,BOOLbStorage=FALSE,BSTRbstrLicKey=NULL){returnCreateControl(GetClsid(),lpszWindowName,dwStyle,rect,pParentWnd,nID,pPersist,bStorage,bstrLicKey);}//属性public:enumwmplcUnknown=0,wmplcClear=1,wmplcInfoChange=2,wmplcMove=3,wmplcDelete=4,wmplcInsert=5,wmplcAppend=6,wmplcPrivate=7,wmplcNameChange=8,wmplcMorph=9,wmplcSort=10,wmplcLast=11}WMPPlaylistChangeEventType;enum{wmposUndefined=0,wmposPlaylistChanging=1,wmposPlaylistLocating=2,wmposPlaylistConnecting=3,wmposPlaylistLoading=4,wmposPlaylistOpening=5,wmposPlaylistOpenNoMedia=6,wmposPlaylistChanged=7,wmposMediaChanging=8,wmposMediaLocating=9,wmposMediaConnecting=10,wmposMediaLoading=11,wmposMediaOpening=12,wmposMediaOpen=13,wmposBeginCodecAcquisition=14,wmposEndCodecAcquisition=15,wmposBeginLicenseAcquisition=16,wmposEndLicenseAcquisition=17,wmposBeginIndividualization=18,wmposEndIndividualization=19,wmposMediaWaiting=20,wmposOpeningUnknownURL=21}WMPOpenState;enum{wmppsUndefined=0,wmppsStopped=1,wmppsPaused=2,wmppsPlaying=3,wmppsScanForward=4,wmppsScanReverse=5,wmppsBuffering=6,wmppsWaiting=7,wmppsMediaEnded=8,wmppsTransitioning=9,wmppsReady=10,wmppsReconnecting=11,wmppsLast=12}WMPPlayState;enum{wmpsdlsDownloading=0,wmpsdlsPaused=1,wmpsdlsProcessing=2,wmpsdlsCompleted=3,wmpsdlsCancelled=4}WMPSubscriptionDownloadState;enumWMP_WRITENAMES_TYPE_CD_BY_TOC=0,WMP_WRITENAMES_TYPE_CD_BY_CONTENT_ID=1,WMP_WRITENAMES_TYPE_CD_BY_MDQCD=2,WMP_WRITENAMES_TYPE_DVD_BY_DVDID=3}WMP_WRITENAMESEX_TYPE;//操作public://IWMPPlayer4//Functions//voidclose(){InvokeHelper(0x3,DISPATCH_METHOD,VT_EMPTYNULL,NULL);}CStringget_URL(){CStringresult;InvokeHelper(0x1,DISPATCH_PROPERTYGET,VT_BSTR,(void*)&result,NULL);returnresult;}voidput_URL(LPCTSTRnewValue){staticBYTEparms[]=VTS_BSTR;InvokeHelper(0x1,DISPATCH_PROPERTYPUT,VT_EMPTYNULL,parms,newValue);}longget_openState()longresult;InvokeHelper(0x2,DISPATCH_PROPERTYGET,VT_I4,(void*)&result,NULL);returnresult;}longget_playState(){longresult;InvokeHelper(0xa,DISPATCH_PROPERTYGET,VT_I4,(void*)&result,NULL);returnresult;}LPDISPATCHget_controls(){LPDISPATCHresult;InvokeHelper(0x4,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);returnresult;}LPDISPATCHget_settings(){LPDISPATCHresult;InvokeHelper(0x5,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);returnresult;}LPDISPATCHget_currentMedia(){LPDISPATCHresult;InvokeHelper(0x6,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);returnresult;}voidput_currentMedia(LPDISPATCHnewValue){staticBYTEparms[]=VTS_DISPATCH;InvokeHelper(0x6,DISPATCH_PROPERTYPUT,VT_EMPTYNULL,parms,newValue);}LPDISPATCHget_mediaCollection(){LPDISPATCHresult;InvokeHelper(0x8,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);returnresult;}LPDISPATCHget_playlistCollection(){LPDISPATCHresult;InvokeHelper(0x9,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);returnresult;}CStringget_versionInfo(){CStringresult;InvokeHelper(0xb,DISPATCH_PROPERTYGET,VT_BSTR,(void*)&result,NULL);returnresult;}voidlaunchURL(LPCTSTRbstrURL){staticBYTEparms[]=VTS_BSTR;InvokeHelper(0xc,DISPATCH_METHOD,VT_EMPTYNULL,parms,bstrURL);}LPDISPATCHget_network(){LPDISPATCHresult;InvokeHelper(0x7,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);returnresult;}LPDISPATCHget_currentPlaylist()LPDISPATCHresult;InvokeHelper(0xd,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);returnresult;}voidput_currentPlaylist(LPDISPATCHnewValue){staticBYTEparms[]=VTS_DISPATCH;InvokeHelper(0xd,DISPATCH_PROPERTYPUT,VT_EMPTYNULL,parms,newValue);}LPDISPATCHget_cdromCollection(){LPDISPATCHresult;InvokeHelper(0xe,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);returnresult;}LPDISPATCHget_closedCaption(){LPDISPATCHresult;InvokeHelper(0xf,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);returnresult;}BOOLget_isOnline(){BOOLresult;InvokeHelper(0x10,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL);returnresult;}LPDISPATCHget_Error(){LPDISPATCHresult;InvokeHelper(0x11,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);returnresult;}CStringget_status(){CStringresult;InvokeHelper(0x12,DISPATCH_PROPERTYGET,VT_BSTR,(void*)&result,NULL);returnresult;}LPDISPATCHget_dvd(){LPDISPATCHresult;InvokeHelper(0x28,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);returnresult;}LPDISPATCHnewPlaylist(LPCTSTRbstrName,LPCTSTRbstrURL){LPDISPATCHresult;staticBYTEparms[]=VTS_BSTRVTS_BSTR;InvokeHelper(0x29,DISPATCH_METHOD,VT_DISPATCH,(void*)&result,parms,bstrName,bstrURL);returnresult;}LPDISPATCHnewMedia(LPCTSTRbstrURL){LPDISPATCHresult;staticBYTEparms[]=VTS_BSTR;InvokeHelper(0x2a,DISPATCH_METHOD,VT_DISPATCH,(void*)&result,parms,bstrURL);returnresult;}BOOLget_enabled(){BOOLresult;InvokeHelper(0x13,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL);returnresult;}voidput_enabled(BOOLnewValue){staticBYTEparms[]=VTS_BOOL;InvokeHelper(0x13,DISPATCH_PROPERTYPUT,VT_EMPTYNULL,parms,newValue);}BOOLget_fullScreen(){BOOLresult;InvokeHelper(0x15,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL);returnresult;}voidput_fullScreen(BOOLnewValue){staticBYTEparms[]=VTS_BOOL;InvokeHelper(0x15,DISPATCH_PROPERTYPUT,VT_EMPTYNULL,parms,newValue);}BOOLget_enableContextMenu(){BOOLresult;InvokeHelper(0x16,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL);returnresult;}voidput_enableContextMenu(BOOLnewValue){staticBYTEparms[]=VTS_BOOL;InvokeHelper(0x16,DISPATCH_PROPERTYPUT,VT_EMPTYNULL,parms,newValue);}voidput_uiMode(LPCTSTRnewValue){staticBYTEparms[]=VTS_BSTR;InvokeHelper(0x17,DISPATCH_PROPERTYPUT,VT_EMPTYNULL,parms,newValue);}CStringget_uiMode(){CStringresult;InvokeHelper(0x17,DISPATCH_PROPERTYGET,VT_BSTR,(void*)&result,NULL);returnresult;}BOOLget_stretchToFit(){BOOLresult;InvokeHelper(0x18,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL);returnresult;}voidput_stretchToFit(BOOLnewValue){staticBYTEparms[]=VTS_BOOL;InvokeHelper(0x18,DISPATCH_PROPERTYPUT,VT_EMPTYNULL,parms,newValue);}BOOLget_windowlessVideo(){BOOLresult;InvokeHelper(0x19,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL);returnresult;}voidput_windowlessVideo(BOOLnewValue){staticBYTEparms[]=VTS_BOOL;InvokeHelper(0x19,DISPATCH_PROPERTYPUT,VT_EMPTYNULL,parms,newValue);}BOOLget_isRemote()BOOLresult;InvokeHelper(0x1a,DISPATCH_PROPERTYGET,VT_BOOL,(void*)&result,NULL);returnresult;}LPDISPATCHget_playerApplication(){LPDISPATCHresult;InvokeHelper(0x1b,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);returnresult;}voidopenPlayer(LPCTSTRbstrURL){staticBYTEparms[]=VTS_BSTR;InvokeHelper(0x1c,DISPATCH_METHOD,VT_EMPTYNULL,parms,bstrURL);}//Properties//};其实大家的困惑是COcxl.h这个头文件竟然没有操作的具体代码,只要找到了上面这些代码就搞定了*/以下为设置对话框
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同解除法律条款与范例解析
- 劳动合同解除与仲裁案例分析
- 2025年山西煤矿电气培训题库及答案
- 小学语文公开课教案设计分享
- 2025-2030中国环保技术行业市场供需分析及投资前景规划分析研究报告
- 建筑钢筋焊接工艺标准操作指导
- 2025-2030中国环保催化剂制造行业市场供需分析及投资评估规划分析研究报告
- 消防安全法规解读及企业落实方案
- 2025-2030中国核电行业市场深度调研及发展趋势
- 2025-2030中国机械钛铁行业市场现状供需分析及投资评估规划分析研究报告
- 2025年山东省政府采购评审专家考试题库附含答案
- 腹壁整形课件
- 冻土地区桩基工程应用-洞察及研究
- 移动传输管理办法
- 2025年中医经典考试题目及答案
- 自行缴纳社保的合同范本
- 水电站大坝安全现场检查技术规程 -DL-T 2204
- 2025至2030中国考试系统行业市场发展现状分析及发展趋势与投资前景报告
- 胶质瘤的围手术期护理
- 大棚施工合同(7篇)
- 工程造价审计服务投标方案(技术方案)
评论
0/150
提交评论