制作RealOne播放器

       制作一个RealOne播放器,来播放RM视频格式的文件,以及流媒体文件。本实例需要添加RealOne组件,只要在系统中安装RealPlayer播放器后,就可以将RealOne组件添加到VC工程中。

(1)新建一个MFC工程对话框,并添加RealOne组件到该工程中。方法是Project->Add to Project->Components and Controls->Registered ActiveX Controls->RealPlayer G2 Control即可。这里所有的组件都是快捷方式,是直接指向操作系统的调用。添加完成后会自动在class view中新加一个类CRealAudio。

(2)然后在DLG类中点击右键,添加成员变量,类型为CRealAudio,名称是m_realplayer,用来操作RealOne组件,此操作会自动写上载入CRealAudio.h头文件。注意:删除成员变量需直接从代码中干掉,如果是删除不需要的成员函数,直接在类中DELETE即可。

(3)在对话框中,添加一个picture控件,和七个按钮控件。按钮名称分别是打开、暂停、停止、音量+、音量-、快递、快退。ID号分别是:IDC_REALPLAYER、IDC_BTOPEN、IDC_BTPAUSE、IDC_BTSTOP、IDC_BTSOUNDADD、IDC_BTSOUNDSUB、IDC_BTPROCADD、IDC_BTPROCSUB。

(4)分别给按钮添加代码,如下:

void CRealOnePlayerDlg::OnBtopen()
{
      CString strname;   //存储目标文件绝对路径
      CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,"realplay文件|*.*");  //为TRUE时打开文件,注意过滤类型
      if (dlg.DoModal() == IDOK)
     {
            strname = dlg.GetPathName();
     }
     if (strname != "")      //如果选了确定的文件
    {
           m_realplayer.SetSource(strname);   //给m_realplayer设置源
           m_realplayer.DoPlay();                      //播放
    }
}

void CRealOnePlayerDlg::OnBtpause()
{
       if (m_realplayer.GetPlayState() == 0)      //0含义不明
              return;
       CString text;
       GetDlgItem(IDC_BTPAUSE)->GetWindowText(text);  //获得当前按钮的属性,具体是获得按钮的文本
       if (text == "暂停")   //如果当前处于播放状态
      {
            m_realplayer.DoPause();   //暂停
            GetDlgItem(IDC_BTPAUSE)->SetWindowText("播放");    //同时改变按钮指示,为播放
      } 
      else                        //显示播放,说明当前处于停止状态
      {
            m_realplayer.DoPlay();     //继续播放
            GetDlgItem(IDC_BTPAUSE)->SetWindowText("暂停");     //同时改变按钮指示,为暂停
       }
}

void CRealOnePlayerDlg::OnBtstop()
{
        m_realplayer.DoStop();  //停止播放
}

void CRealOnePlayerDlg::OnBtsoundadd()
{
        short vl = 0;
        if (m_realplayer.GetPlayState()==3)      //3含义不明
       {
              vl = m_realplayer.GetVolume();       //获得当前音量
              if (vl <= 90)                                      //做大音量100
             {
                   m_realplayer.DoPause();
                   m_realplayer.SetVolume(vl + 10);    //以10为单位+
                   m_realplayer.DoPlay();               //先暂停,加完音量后再继续播放
              }
        }
        else
        {
               if (vl <= 90)
               {
                     m_realplayer.SetVolume(vl + 10);                   

               }
         }
}

void CRealOnePlayerDlg::OnBtsoundsub()
{
       short vl = 0;
       if (m_realplayer.GetPlayState() == 3)
      {
            vl = m_realplayer.GetVolume();
            if (vl >= 10)                      //最小音量0
           {
                 m_realplayer.DoPause();
                 m_realplayer.SetVolume(vl - 10);       //以10为单位-
                 m_realplayer.DoPlay();                       //先暂停,减完音量后再继续播放
            }
       }
       else
       {
             if (vl >= 10)
             {
                   m_realplayer.SetVolume(vl - 10);
              }
       }
}

void CRealOnePlayerDlg::OnBtprocadd()
{
       if (m_realplayer.GetPlayState() == 3)
       {
              long pos = m_realplayer.GetPosition();     //时间概念
              m_realplayer.DoPause();
              m_realplayer.SetPosition(pos+2000);       //2秒后的内容
              m_realplayer.DoPlay();
        }
}

void CRealOnePlayerDlg::OnBtprocsub()
{
       if (m_realplayer.GetPlayState() == 3)
       {
              long pos = m_realplayer.GetPosition();
              if (pos < 2000)
              {
                    return;
               }
               m_realplayer.DoPause();
               m_realplayer.SetPosition(pos - 2000);    //2秒前的内容
               m_realplayer.DoPlay();
        }
}

(5)添加WM_TIMER消息和DestroyWindow消息处理

void CRealOnePlayerDlg::OnTimer(UINT nIDEvent)
{
       m_realplayer.DoPlay();
       CDialog::OnTimer(nIDEvent);
}

BOOL CRealOnePlayerDlg::DestroyWindow()
{
       KillTimer(0);   //默认TIMER0
       return CDialog::DestroyWindow();
}

不过后来证明,删掉这两个处理一样正常。

(6)利用图片控件,对显示窗口的处理,在OnInitDialog末尾添加:

 CRect rc;    //矩形域
 GetDlgItem(IDC_REALPLAYER)->GetWindowRect(rc);   //把图片控件取成矩形域
 ScreenToClient(&rc);                                                     //屏幕坐标转成窗口坐标
 m_realplayer.Create("",WS_POPUP,rc,this,10000);     //创建realplayer的
 m_realplayer.ShowWindow(SW_SHOW);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值