Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9726777
  • 博文数量: 1227
  • 博客积分: 10026
  • 博客等级: 上将
  • 技术积分: 20273
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 12:40
文章分类

全部博文(1227)

文章存档

2010年(1)

2008年(1226)

我的朋友

分类: C/C++

2008-03-11 18:00:49

本文介绍如何插入RealPlay控件实现媒体文件的播放, 代码运行效果图如下:



下面简要介绍一下具体实现步骤:

一、建立基于对话框的程序

二、在对话框内添加RealPlayer G2 control的ActiveX控件
(工程->添加工程->compontent and controls->registed ActiveX controls )。

三、在对话框内添加源程序内所示的按钮和静态文本 分别用于控制打开播放等控制及显示歌曲信息 其ID号如源程序

四、用MFC映射各按钮消息
void CSunapplerealplayerDlg::OnOpen() 
{
char szFileFilter[]=
        "RM File(*.rm)|*.rm|"
  "Mp3 File(*.mp3)|*.mp3|"
  "MPEG File(*.mpeg)|*.mpeg|"
  "Media File(*.asf)|*.asf|"
  "Video File(*.dat)|*.dat|"
  "MPGA File(*.mpga)|*.mpga|"
  "Wave File(*.wav)|*.wav|"
  "AVI File(*.avi)|*.avi|"
  "Movie File(*.mov)|*.mov|"
  "Mid File(*.mid;*,rmi)|*.mid;*.rmi|"
  "Wma File(*.wma)|*.wma|"
  "All File(*.*)|*.*||";

 CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
 if(dlg.DoModal()==IDOK){
  CString PathName=dlg.GetPathName();
  PathName.MakeUpper();
  m_player->SetSource(PathName);
  m_player->DoPlay();
  SetDlgItemText(IDC_STATIC1,m_player->GetAuthor());
     SetDlgItemText(IDC_STATIC2,m_player->GetTitle());
     SetDlgItemText(IDC_COPYRIGHT,m_player->GetCopyright());
     SetDlgItemText(IDC_SOURCE,m_player->GetSource());
 } 
}

void CSunapplerealplayerDlg::OnPlay() 
{    
 SetDlgItemText(IDC_STATIC1,m_player->GetAuthor());
 SetDlgItemText(IDC_STATIC2,m_player->GetTitle());
 SetDlgItemText(IDC_COPYRIGHT,m_player->GetCopyright());
 SetDlgItemText(IDC_SOURCE,m_player->GetSource());
    m_player->DoPlay();
 
 UpdateData(false);
 SetTimer(1,20,NULL);
}

void CSunapplerealplayerDlg::OnTimer(UINT nIDEvent) 
{
   if(0&&isRepeat)
  m_player->DoPlay();
 CDialog::OnTimer(nIDEvent);
}

void CSunapplerealplayerDlg::OnClose() 
{
 ///////添加此代码时不要忘了在stdafx.h开头处添加前两行
 AnimateWindow(GetSafeHwnd(),1000,AW_HIDE|AW_BLEND);
 KillTimer(0);
////////////////////////////////////
//此处采用DestroyWindow关闭窗口
//多谢杜修杏 老师指点
///////////////////////////////////
 this->DestroyWindow();
 
}

void CSunapplerealplayerDlg::OnFullscreen() 
{
  m_player->DoPause();
  m_player->SetFullScreen();
  m_player->DoPlay();
}

void CSunapplerealplayerDlg::OnMp3down() 
{
 ShellExecute(NULL,_T("open"),"",NULL,NULL,TRUE); 
 
}

void CSunapplerealplayerDlg::OnPause() 
{
 
 m_player->DoPause();
}

void CSunapplerealplayerDlg::OnStop() 
{
    m_player->DoStop();
 KillTimer(0);
}

void CSunapplerealplayerDlg::OnRepeat() 
{   
    m_player->SetLoop(true);
 if(isRepeat){
  isRepeat=FALSE;
  SetDlgItemText(IDC_REPEAT,"循环");
   }
   else
   {
    isRepeat=TRUE;
    SetDlgItemText(IDC_REPEAT,"正常");
   }
}


void CSunapplerealplayerDlg::OnLower() 
{
 // TODO: Add your control notification handler code here
 short volume=m_player->GetVolume();
 m_player->DoPause();
 m_player->SetVolume(volume-100);
 m_player->DoPlay();
}

void CSunapplerealplayerDlg::OnUpper() 
{
 // TODO: Add your control notification handler code here
 short volume=m_player->GetVolume();
 m_player->DoPause();
 m_player->SetVolume(volume+100);
 m_player->DoPlay();
}

void CSunapplerealplayerDlg::OnFloat() 
{
 //   TODO: Add your command handler code here
 ShellExecute(NULL,_T("open"),"",NULL,NULL,TRUE); 
}

void CSunapplerealplayerDlg::OnPetroleum() 
{
 // TODO: Add your command handler code here
 ShellExecute(NULL,_T("open"),"",NULL,NULL,TRUE); 
}
五、映射WM_CTLCOLOR消息,用于控制文本显示的颜色
HBRUSH CSunapplerealplayerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
    if(nCtlColor==CTLCOLOR_STATIC)
  if(pWnd.GetDlgCtrlID()==IDC_VOLUME)
  {
   pDC.SetTextColor(RGB(165,182,222));
   pDC.SetBkMode(TRANSPARENT);
   return (HBRUSH) m_brush.GetSafeHandle();
  }
  if(pWnd.GetDlgCtrlID()==IDC_STATIC1||pWnd.GetDlgCtrlID()==IDC_STATIC2
  ||pWnd.GetDlgCtrlID()==IDC_SOURCE||pWnd.GetDlgCtrlID()==IDC_COPYRIGHT)
  {
   pDC.SetTextColor(RGB(0,0,255));
   pDC.SetBkMode(TRANSPARENT);
   return (HBRUSH) m_brush.GetSafeHandle();
  }
  if(pWnd.GetDlgCtrlID()==IDC_STATIC||pWnd.GetDlgCtrlID()==IDC_INFO)
  {
         pDC.SetTextColor(RGB(255,0,0));
   pDC.SetBkMode(TRANSPARENT);
   return (HBRUSH) m_brush.GetSafeHandle();
  }
 // TODO: Return a different brush if the default is not desired
 return hbr;
}
六、在APP类里的initInstance()里添加下面函数改变对话框背景。
SetDialogBkColor(RGB(206,227,99));
七、为了美观我们的外形可引入CButtonXP类,将个按钮类型设置为CButtonXP

好了,应该大功告成了!调试一下吧!
本程序在调试过程中要多谢杜修杏老师的指点。
阅读(1616) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~