vs2005下MFC调用Windows Media Player小结

由于尝试在wince(x86)下调用vlc来播放视频未果。所以,寄希望于调用Windows平台下自带的WindowsMediaPlayer(wmp)。因此这两天先尝试下在xp平台下调用wmp。

因为本人并不喜欢mfc,但是项目需要又只能硬着头皮上,这次调用wmp也走了个弯路。因此,这篇文章只起到总结和借鉴的作用。

基本环境:

vs2005

1.所走的弯路

本以为,mfc调用wmp跟调用vlc一样,简单的应用ActiveX插件,进行调用,方便省事。但是,发现其实调用的是wmp的 .ocx控件。这里的Activex插件和ocx控件是有写区别的。参见http://baike.baidu.com/view/393671.htm

因此,开始时,我参阅网上相关的网页操作方法如下:

  • 安装WMP9
  • VS2005创建mfc工程,名称如MP。
  • 在资源视图中,右键“insert activex control...”,添加Windows Media Player控件。右击控件“add variable...”,指定变量名m_player。这时,你会发现工程中添加了两个文件,分别为:ocx1.h和ocx1.cpp文件。这时发现ocx1.h文件中只有变量的设定,而并没有对应的方法。并且在MPDlg.cpp文件中会有如下:void CMP1Dlg::DoDataExchange(CDataExchange* pDX)
    {
     CDialog::DoDataExchange(pDX);
     DDX_Control(pDX, IDC_OCX1, m_player);
    }

  • 继续按照网上的方法在solution explorer中右击"MP"->"add"->"class...",选择"MFC class From ActiveX Control".选择"registry"单选框,并选择"Windows Media Player<1.0>"。Location:c:\windows\system32\wmp.dll,之后将所有的接口文件加入到工程。
  • ......

也许因为wmp版本问题或者其他什么原因,有些人可以通过上面的方法得到想要的结果。但是我没有成功。而下面是我得到正确的方法。

2.可行方法

  • 首先将WMP9去除,并注册ocx。方法为:在"开始"-"运行"中regsvr32 c:\windows\system32\wmp.dll /u ,卸载掉 9.0 版本 WindowsMediaPlayer, 然后,在在 PC 机的 [ 开始 ]-[ 运行 ] 里执行以下命令:regsvr32 c:\windows\system32\msdxm.ocx
  • VS2005创建mfc工程,名称如MP1。
  • 在资源视图中,右键“insert activex control...”,添加Windows Media Player控件。右击控件“add variable...”,指定变量名m_player。这时,你会发现工程中添加了两个文件,分别为:mediaplayer1.h和mediaplayer1.cpp文件。这时发现mediaplayer1.h文件中只有变量的设定,并有对应的方法。并且在MP1Dlg.cpp文件中会有如下:void CMP1Dlg::DoDataExchange(CDataExchange* pDX)
    {
     CDialog::DoDataExchange(pDX);
     DDX_Control(pDX, IDC_MEDIAPLAYER1, m_player);
    }
  • 在solution explorer中右击"MP"->"add"->"class...",选择"MFC class From ActiveX Control".选择"registry"单选框,并选择"Windows Media Player<1.0>"。Location:c:\windows\system32\msdxm.ocx,之后将IMediaPlayer2接口加入到工程。此时工程将出现CMediaPlayer2.h和.cpp文件。如图
  • 然后在MP1Dlg.h中将m_player的类替换成CMediaPlayer2。
  • 添加按钮:写入代码: char szFileFilter[]=
      "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 fileDialog( TRUE,NULL,NULL,NULL,szFileFilter,this);
     if (fileDialog.DoModal() == IDOK)
     {
      CString  fileName=fileDialog.GetPathName();
      fileName.MakeUpper();
      m_player.put_FileName(fileName);
     }
  • 运行。

3.至此,运行的程序就能选择文件并播放,也可以添加其他的功能,这里不多说。有个遗憾是,因为avi格式的压缩可能有多种格式,可能会出现不能播放或者只有声音未见图像的情况。

posted on 2011-03-23 15:02  Big_Z  阅读(4207)  评论(2编辑  收藏  举报

导航