• VC2005下制作媒体播放器


    前几天突然间心血来潮,打算自己用VC做一个媒体播放器,于是到网上搜索了一下,发现有很多好心人贴出了很多例子(很是感谢),一些是VC6写的,一些是VC2003/2005写的,都是直接通过wmp.dll(WINDOW MEDIA PLAYER9带的ACTIVE控件,存放在C:\WINDOWS\system32目录下。本人对VC6有点排斥(哈哈,就是觉得其C++标准支持太差了,故一般做项目时不考虑,实在没办法的时候才采用),就直接开始在VC2005下按照提示编写了。

    开始总是一样:

    1、添加一个解决方案;

    2、在解决方案下添加一个MFC对话框程序;

    3、编辑对话框资源的时候,在左边的工具栏上通过选择项-》COM组件,选择Windows Media Player进行添加,添加之后工具栏上即多了一个Windows Media Player项,把其拉到设计窗口中,选择其属性,设置enableContextMenu为true,即允许播放器弹出菜单;

    4、给对话框添加菜单,菜单功能很简单,就是文件-》打开/退出;

    在资源窗口中通过右键选择添加一个MENU,默认为IDR_MENU1,然后在对话框的属性中把Menu设置为IDR_MENU1,此时即在对话框中加入了菜单:

    5、实现子菜单项的打开功能:

    在资源窗口的打开子菜单中,点击右键,选择添加事件处理,消息选择COMMAND,类列表选择Dlg的那个,此时即可编辑函数:

    void CMPlayDlg::On32771()
    {
     CFileDialog dlg(TRUE, NULL, L"*.*", OFN_FILEMUSTEXIST,
      L"Active Streaming Format(*.asf)|*.asf|"\
      L"Audio Video Interleave Format(*.avi)|*.avi|"\
      L"RealAudio/RealVideo(*.rm)|*.rm|"\
      L"Wave Audio(*.wav)|*.wav|"\
      L"MIDI File(*.mid)|*.mid|"\
      L"所有文件(*.*)|*.*||");
     if (dlg.DoModal() == IDOK) {
      //m_ctrlMPlayer.put_stretchToFit(TRUE); // 伸缩画面,使其适合播放窗口
      // …… 可以在此进行各种其他设置
      m_ctrlMPlayer.put_URL(dlg.GetPathName()); // 传递媒体文件到播放器
     }
    }

    6、实现窗口的WMSIZE:

    由于窗口大小会产生改变,所以窗口中的视频窗口也要作相应的变动,故需要实现窗口的WM_SIZE函数:

    void CMPlayDlg::OnSize(UINT nType, int cx, int cy)
    {
     CDialog::OnSize(nType, cx, cy);
     if (m_ctrlMPlayer)
     {
      m_ctrlMPlayer.MoveWindow(0, 0, cx-40, cy);
     }
    }

    注:没加上 if (m_ctrlMPlayer)之前DEBUG总是报错,RELEASE倒是没事,后来我想应该是程序启动时,m_ctrlMPlayer还没有初始化,故报错。

    这样一个简单的播放器就做成了。

    由于我想要查看一下当前播放的媒体的名称以及想查看进度,故需要引进CWMPMedia和CWMPControls一类的控制对象,所以在解决方案的资源管理器中右键-》添加类-》MFC-》ACTIVEX中的MFC类-》下拉列表中选择Windows Media Player<1.0>,然后选择左边的一些相关类拉到右边来,确定即可,此时这些类对应的H和CPP文件就都加了进来;

    我想控制播放器的播放,参考了网上的一些代码,所以:

    m_control =  m_ctrlMPlayer.get_controls();
     double d = m_control.get_currentPosition();
     d = d+1;
     CWMPMedia m_media = static_cast<CWMPMedia>(m_ctrlMPlayer.get_currentMedia());
     CString s = m_media.get_name();

    哈哈,总是编译不通过,后来查了一下,发现CWMPControls是继承自CWnd,所以从网上抄了CWMPControls继承自COleDispatchDriver的H和CPP的代码。编译通过(为了寻找这个问题,花了不少时间)。

    哈哈,借花献佛,希望有碰到同样的问题的朋友少走点弯路。

  • 相关阅读:
    运维笔记--docker容器部署mongodb 数据持久化
    odoo开发学习-debug&开发者模式 取消
    python开发 -- 批量修改文件后缀名为指定格式
    python开发 -- 判断文件编码格式是否为UTF8 有/无BOM格式
    odoo开发学习 -- 模块目录结构
    odoo开发学习 -- Python2 or Python3?关于环境搭建的软件版本选择
    odoo开发学习 --一点题外话
    odoo各版本新特性及变更记录 --持续更新
    odoo开发学习 -- odoo12 Docker镜像制作
    odoo开发学习--saas环境搭建(一)
  • 原文地址:https://www.cnblogs.com/tianfu/p/1490965.html
Copyright © 2020-2023  润新知