zoukankan      html  css  js  c++  java
  • 【VC学习】VC2010 Windows Media Player控件的使用技巧

    声明:以下博客基于@无幻 VC2008 Windows Media Player控件的使用技巧,自行学习整理

    附上原地址:http://blog.csdn.net/akof1314/article/details/4900040

    本是跟着老师选修课学习,编程都是基于MFC,手动在toolbox里面修改的,看到博主写的,还是有点难度,经过一晚上的研究,不断的解决问题,终于完成了博主123除进度条之外的功能,本人新手,谬误或理解不对的请指导,进度条再研究下。


    我是以VS2010为例,对比6.0,2008有少许不同,细节截图请参照原博客。

    此色为注释和个人添加

    /*********************************************我是分割线***********************************/

    首先,新建一个基于对话框的工程,在对话框上,右键选择”插入ActiveX控件 (Insert ActiveX Control...)“,在弹出的框中选择“Windows Media Player ”完成;没有的可以试试,toolbox,右键,choose items,COM Components,往后翻,点击windows media player,前面的勾,选上,ok,应该就有了
    然后,我们要添加相应的类,关闭对话框资源(防止误认为对话框添加类),单击“项目 ”→“添加类 ”→“ActiveX控件中的MFC类 (flag)”,弹出如下对话框,我们必须要如下顺序添加接口,否则不好关联控件。在这里我把所有的接口都添加了,大家可以依据需要而添加:

    可以先看下第二条分割线的内容。

    在这里的时候,添加IWMPPlayer4,没问题,但是第二部出现 “...cannot find coclass for interface...”的错误提示框,开始没有管他,后来在做播放控制的时候发现,头文件什么都添加不了,想起了这里的问题,经过一番查找,问题解决:原地址,在上面flag的位置,选择MFC Class From TypeLib(类型库向导),添加就没有问题了,后面的控制也没问题了。

    接下来,我们要添加头文件#include "CWMPPlayer4.h",然后声明控件对象,如下所示:

    然后,手动关联控件,在这里控件的ID号为IDC_OCX1,大家依情况而修改,如下所示:

    最后,则是测试功能的实现了,这里我只测试了下能否打开音视频,主要是要控件有没有关联正确:

    好,已经绑定成功。之前一直出现不识别put_URL什么的这样就解决了。


    /*********************************************我是分割线***********************************/

    博主第二篇是对于找不到的,因为当时前面添加类型库了,就没有管这个了附上连接吧

    http://blog.csdn.net/akof1314/article/details/4900244



    /*********************************************我是分割线***********************************/

    以下是博主第三篇的内容

    在上次的编写Media Player播放器后,这次我们来实现对音视频的控制,比如:播放、暂停、停止、快进、音量、进度条等等。首先我们在对话框上放置如下按钮,如图:

    在对话框头文件中,添加播放器的一些头文件和声明对象。前面没有添加上的在这里的头文件包括就会出错,请返回第二条分割线

    1. // TestDlg.h : 头文件  
    2. //  
    3. #pragma once  
    4. #include "afxwin.h"  
    5. #include "CWMPPlayer4.h"     //播放头文件  
    6. #include "CWMPControls.h"   //控制头文件  
    7. #include "CWMPSettings.h"   //设置头文件  
    8. #include "CWMPMedia.h"      //媒体头文件  
    9. #include "afxcmn.h"  
    10. // CTestDlg 对话框  
    11. class CTestDlg : public CDialog  
    12. {  
    13. // ······在这里省略  
    14. public:  
    15.     CWMPPlayer4 m_Player;    //播放地址关联  
    16.     CWMPControls m_control;  //控制按钮关联  
    17.     CWMPSettings m_setting;   //设置按钮关联  
    18.     CWMPMedia m_media;  //媒体  
    19.     CProgressCtrl m_progress;  //进度条      
    20. };  

    对窗体添加事件,添加一个OnTimer()事件。对Media Player添加播放改变PlayStateChange()我自己的问题就是这个PlayStateChange的添加有点问题,等研究明白再更新吧,也希望各位不吝指导。这里对于按键ID我觉得还是应该修改下,每次添加一个控件就修改下ID,这样Button123456789实在是分不出来。

    1. // TestDlg.cpp : 实现文件  
    2. BOOL CTestDlg::OnInitDialog()  
    3. {  
    4.     //·········省略  
    5.     m_control=static_cast<CWMPControls>(m_Player.get_controls());  
    6.     m_setting=m_Player.get_settings();    
    7.     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE  
    8. }  
    9. void CTestDlg::OnBnClickedButton1()  
    10. {     
    11.     m_control.play();  //播放  
    12. }  
    13. void CTestDlg::OnBnClickedButton6()  
    14. {     
    15.     CString fileName;  
    16.     CFileDialog fileDialog( TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("音频、视频文件(*.*)|*.*||"),this);  
    17.     if (fileDialog.DoModal() == IDOK)  
    18.     {  
    19.         fileName=fileDialog.GetPathName();  
    20.         m_Player.put_URL(fileName);   //打开播放  
    21.     }   
    22.     m_media=static_cast<CWMPMedia>(m_Player.newMedia(fileName));  
    23.     m_progress.SetRange(0,(int)m_media.get_duration());  //媒体总长度  
    24.     m_progress.SetPos(0);     
    25. }  
    26. void CTestDlg::OnBnClickedButton2()  
    27. {     
    28.     m_control.pause();  //暂停  
    29. }  
    30. void CTestDlg::OnBnClickedButton3()  
    31. {     
    32.     m_control.stop();        //停止  
    33. }  
    34. void CTestDlg::OnBnClickedButton4()  
    35. {     
    36.     m_control.fastForward();   //快进  
    37. }  
    38. void CTestDlg::OnBnClickedButton5()  
    39. {     
    40.     m_control.fastReverse();   //快退  
    41. }  
    42. void CTestDlg::OnBnClickedButton7()  
    43. {     
    44.     m_Player.put_fullScreen(1);   //全屏  
    45. }  
    46. void CTestDlg::OnBnClickedButton8()  
    47. {     
    48.     m_setting.put_volume(m_setting.get_volume()-10);   //音量减少  
    49. }  
    50. void CTestDlg::OnBnClickedButton9()  
    51. {     
    52.     m_setting.put_volume(m_setting.get_volume()+10);  //音量增加  
    53. }  
    54. void CTestDlg::PlayStateChangeOcx1(long NewState)  
    55. {     
    56.     if (NewState==3)                //播放状态时, 开启定时器  
    57.         SetTimer(1,1000,NULL);    
    58.     else if (NewState==1)             //停止时, 关闭定时器, 进度条回0  
    59.     {  
    60.         m_progress.SetPos(0);  
    61.         KillTimer(1);  
    62.     }  
    63.     else  
    64.         KillTimer(1);  
    65. }  
    66. void CTestDlg::OnTimer(UINT_PTR nIDEvent)  
    67. {  
    68.     // TODO: 在此添加消息处理程序代码和/或调用默认值  
    69.     if (nIDEvent != 1)    
    70.          return;  
    71.     m_progress.SetPos(m_progress.GetPos()+1);  
    72.     CDialog::OnTimer(nIDEvent);  
    73. }  

    效果如下:


    附上自己的程序

    http://download.csdn.net/detail/portb/8678059

    附上

    Media player控件常用属性


    属性/方法名: 说明:
     [基本属性]  
    URL:String; 指定媒体位置,本机或网络地址
    uiMode:String; 播放器界面模式,可为Full, Mini, None, Invisible
    playState:integer; 播放状态,1=停止,2=暂停,3=播放,6=正在缓冲,9=正在连接,10=准备就绪
    enableContextMenu:Boolean; 启用/禁用右键菜单
    fullScreen:boolean; 是否全屏显示
     [controls] wmp.controls //播放器基本控制
    controls.play; 播放
    controls.pause; 暂停
    controls.stop; 停止
    controls.currentPosition:double; 当前进度
    controls.currentPositionString:string; 当前进度,字符串格式。如“00:23”
    controls.fastForward; 快进
    controls.fastReverse; 快退
    controls.next; 下一曲
    controls.previous; 上一曲
     [settings] wmp.settings //播放器基本设置
    settings.volume:integer; 音量,0-100
    settings.autoStart:Boolean; 是否自动播放
    settings.mute:Boolean; 是否静音
    settings.playCount:integer; 播放次数
     [currentMedia] wmp.currentMedia //当前媒体属性
    currentMedia.duration:double; 媒体总长度
    currentMedia.durationString:string; 媒体总长度,字符串格式。如“03:24”
    currentMedia.getItemInfo(const string); 获取当前媒体信息"Title"=媒体标题,"Author"=艺术家,"Copyright"=版权信息,"Description"=媒体内容描述,"Duration"=持续时间(秒),"FileSize"=文件大小,"FileType"=文件类型,"sourceURL"=原始地址
    currentMedia.setItemInfo(const string); 通过属性名设置媒体信息
    currentMedia.name:string; 同 currentMedia.getItemInfo("Title")
     [currentPlaylist] wmp.currentPlaylist //当前播放列表属性
    currentPlaylist.count:integer; 当前播放列表所包含媒体数
    currentPlaylist.Item[integer]; 获取或设置指定项目媒体信息,其子属性同wmp.currentMedia


  • 相关阅读:
    Spring Boot日志管理
    JProfiler
    JProfiler学习笔记
    jprofiler安装图解
    方便!C++ builder快捷键大全
    QuickFix/N简介
    QuickFIX/N入门:(三)如何配置QuickFIX/N
    java自带线程池和队列详细讲解
    SQLYog快捷键大全
    DBCP连接池配置参数说明
  • 原文地址:https://www.cnblogs.com/portb/p/12037341.html
Copyright © 2011-2022 走看看