【VC学习】VC2010 Windows Media Player控件的使用技巧

article/2025/10/19 3:50:59

声明:以下博客基于@无幻 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播放器后,这次我们来实现对音视频的控制,比如:播放、暂停、停止、快进、音量、进度条等等。首先我们在对话框上放置如下按钮,如图:

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

[cpp]  view plain copy
  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实在是分不出来。

[cpp]  view plain copy
  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



http://chatgpt.dhexx.cn/article/aFTVAvp9.shtml

相关文章

真Unity3d_分享一个编辑器扩展模型预览视图Mesh Preview Inspector窗口

预览窗口 在 Unity 编辑器界面上可以看到除了 Game 视图、Scene 视图,其他的视图也会出现绘制三维物体的地方,比如检视器的预览窗口,当选中网格时,会对网格进行预览,如下所示: 预览窗口是UnityEditor的底层框架 UnityEditor框架图 可看我之前的博客: https://blog.c…

lookup

这里注意数组 1.{ sum((E3:E11)*(F3*F11) )} 代表数组运算ctrlentershift&#xff0c;因为(E3:E11)*(F3*F11)返回的是数组 2. sum(E3:E11)其中E3:E11也是数组但是直接enter就可以‘ 为什么&#xff1a;因为(E3:E11)是本来就存在的列&#xff0c;(E3:E11)*(F3*F11)是运算出来…

access Dlookup的值写入表

目的 写入供应商名称&#xff0c;自动弹出供应商代码&#xff0c;然后将该条记录增加到表中 方法 在供应商名称的属性表写&#xff0c;不是供应商代码的属性表 在事件过程中写入- Private Sub 供应商名称_AfterUpdate() Me.供应商代码.Value DLookup(“供应商代码”, “Q_…

access-vba之用户登录窗口

界面截图如下: 创建一个窗体设计,然后在设计中找到控件 因为科室更新,带来了用户的更新,所有用户的行来源不指定,但科室的行来源要指定 最后,我们通过VBA实现用户的行来源,这样可以保证在科室变化的情况下,用户实时显示每个科室的人员 Private Sub keshi_AfterUpdate(…

Excel函数公式大全—LOOKUP函数

EXCEL系列文章目录 Excel系列文章是本人亲身经历职场之后萌发的想法&#xff0c;为什么Excel覆盖如此之广&#xff0c;几乎每个公司、学校、家庭都在使用&#xff0c;但是它深藏的宝藏功能却很少被人使用&#xff0c;PQ、BI这些功能同样适用于数据分析&#xff1b;并且在一些需…

Dev的searchLookUpEdit

新添加的searchLookUpEdit的Text属性值为[EditValue is null]&#xff0c;并且无法直接通过修改Text属性来修改&#xff0c;而是可以通过修改它的Properties.NullText属性来修改&#xff0c;比如将该属性赋值为空&#xff0c;则为如下效果&#xff1a; searchLookUpEdit1.Prop…

LOOKUP函数10种经典用法

转载 https://mp.weixin.qq.com/s?__bizMzI0NzA5MTAyNg&mid2653352337&idx1&sn7494ca76ddf66483d8961f84fdbc958e&chksmf2670bacc51082baa65caa5f9af84e2f2121d635a16be1e9fd9557c6d8c68a5fe17bf90a4ce8&scene27 案例1:按照销售金额区间查询提成比例 此法…

LOOKUP函数

数值可升序&#xff1a; lookup&#xff08;查找值&#xff0c;查找区域&#xff0c;返回值&#xff09; lookup&#xff08;查找值&#xff0c;查找区域返回值B2&#xff09; B2的 第一列为查找区域&#xff0c;最后一列返回值 https://wenku.baidu.com/view/ddce993ae45c3b35…

ChatGPT 总结VLOOKUP,LOOKUP,HLOOKUP,XLOOKUP用法与区别

很多人一直都没明白Excel中VLOOKUP&#xff0c;LOOKUP&#xff0c;HLOOKUP&#xff0c;XLOOKUP各查找函数之间的区别到底是什么&#xff0c;也很容易记错。 今天我们就让ChatGPT人工智能来帮助我们总结出各函数的用法。 当涉及到在 Excel 中查找数据时&#xff0c;这些函数都可…

Excel中的HLOOKUP、VLOOKUP、XLOOKUP函数

昨天使用INDEX和MATCH两个EXCEL函数完成了表中数据的快速查找&#xff0c;想一想&#xff0c;EXCEL中还有另外的查找函数&#xff0c;比如HLOOKUP、VLOOKUP、LOOKUP、XLOOKUP函数&#xff0c;那使用它们能不能完成同样的操作呢&#xff1f;   可以的。   仍然是昨天的问题&…

【保姆级】lookup-method标签实践与分析

【Spring源码系列- IOC】 1 【Spring源码】0.安装Gradle环境 2 【Spring源码】1.下载与编译_pom relocation to an other version number is not f 3 【Spring源码】2.试个水先&#xff5e;Debug找到传说中的三级缓存(图解向&#xff0c;堆图预警) 4 【Spring源码】3. x…

实战! excel常用函数中lookup的用法

实战 ! VLOOKUP实操&#xff1a; 图一 图二 当我们拿到图一这样的表&#xff0c;而需要获得图二的数据时候&#xff0c;就可以这样做&#xff1a; 图三 在所需要的单元格输入公式&#xff0c;VLOOKUP([区域],表1,3,0)&am…

Xlookup、Vlookup请走开,万能的Wlookup函数来了!

前天&#xff0c;为大家介绍了关于Vlookup接班人Xlookup函数的介绍&#xff0c;一方面惊叹于Xlookup强大的查找功能&#xff0c;另一方面也担心自已只能远观而不能使用。毕竟付费office365的用户占极少数。点击进入查看>> 那怎么办&#xff1f;下面为大家编写了一个比Xl…

EXCEL基础:XLOOKUP函数的简单使用

实验表格如下&#xff0c;这是一个简单的NBA球星信息的表格&#xff1a; 最简单的使用方法&#xff1a; 1、【简单使用1】需求&#xff1a;通过【杜兰特】姓名&#xff0c;知道其所在的【球队】。 在【I3】单元格输入【XLOOKUP(H3,D2:D8,B2:B8)】&#xff0c;其中H3表示的是要…

ACCESS中Dlookup函数使用

ACCESS中Dlookup函数使用 ACCESS中Dlookup函数使用 Dlookup函数&#xff0c;利用条件从表中筛选查找需要的单项数据&#xff0c;类似EXCEL中的Vlookup函数&#xff0c;用法简单快捷&#xff0c;相对SQL语句要简单。 函数用法 Dlookup(字段名&#xff0c;表或查询名字&#…

详解-脏读、幻读与不可重复读

最近在读 《MySQL 技术内幕 InnoDB 存储引擎》&#xff0c;里面提到的各种概念都很新鲜&#xff0c;以前听说过脏读、幻读、不可重复读&#xff0c;但是对于概念不甚了解&#xff0c;于是查了一下&#xff0c;这里做个笔记。 数据库事务特征 数据库事务特征&#xff0c;即 ACID…

17@MySQL数据库读现象详解(脏读、幻读、不可重复读)

文章目录 MySQL数据库读现象一、数据库的读现象1、脏读&#xff08;dirty read&#xff09;&#xff1a;读取未提交数据【案列详解】2、不可重复读取 (nonrepeatable read)&#xff1a;前后多次读取&#xff0c;数据内容不一致【案列详解】3、幻读(nonrepeatable read)&#xf…

简单解释不可重复读和幻读

之前看了一篇关于数据库隔离级别的文章觉得挺好。http://singo107.iteye.com/blog/1175084 不过很多人对“不可重复读”和“幻读“这两者的区别搞不清楚&#xff0c;包括我自己曾也是迷糊了很久一段时间。 但是&#xff0c;必须说明的是“不可重复读”关注的重点其实在于更新…

可重复读隔离级别如何解决脏读、不可重复读

我们都知道可重复读隔离级别可以解决脏读、不可重复读。那么具体是如何解决的呢&#xff1f; 下面先通过实验来演示可重复读能够解决脏读、不可重复读问题&#xff0c;然后解释具体的原因。 环境搭建 1. 建立两个session连接MySQL,session1和session2 关闭session1和session…

简单聊聊mysql的脏读、不可重复读、幻读

最近&#xff0c;在一次 mysql 死锁的生产事故中&#xff0c;我发现&#xff0c;关于 mysql 的锁、事务等等&#xff0c;我所知道的东西太碎了&#xff0c;所以&#xff0c;我试着用几个例子将它们串起来。具体做法就是通过不断地问问题、回答问题&#xff0c;再加上“适当”的…