用MFC做媒体播放器

 Windows   media   player作为MS的官方组件,MSDN上有着比较详细的英文说明,但是该说明却并不是那么让人一目了然。该文就如何操作该组件的几个主要接口以及一些基本功能的实现给与详尽而明白的说明,为使该文尽量简单易懂,本文给出了用windows   media   player控件编写一个简单播放器的基本步骤。

 

首先,创建一个对话框,然后在资源管理器中右击对话框,选择“插入Active控件”—〉选择windows   media   player—〉将控件拉到适合大小—〉右击player控件—〉选择添加变量(m_avPlayer)。此时添加的变量在VS2003中不在时IWMPPlay4   了,而是COcx。

 

右击类视图/解决方案—〉添加类—〉选择“Active中的MFC类”—〉选择windows   media   player <1.0> à选择相应的接口(IWMPMedia   IWMPSettings   IWMPControls   IWMPPlaylist等等)生成类。为图方便,我将所有接口都生成了相应的类。

为了说明方便,我在对话框中放了几个按钮,分别是:打开,播放,暂停,停止,添加。并在对话框右边添加了一个clistctrl又来显示播放列表。

然后在对话框头文件中添加了以下变量:

CWMPControls   m_control;

CWMPSettings   m_set;  

CWMPPlaylist         m_playlist;

CWMPMedia   m_media;

COcx1   m_avPlayer;

 

CListCtrl   m_listCtrl;

 

一切准备工作就绪,下面就涉及到具体的编程问题了。

media   player   的主要功能有:播放控制,屏幕显示,播放列表,播放列表集,播放信息显示。

 

l                   其中播放控制又有:打开,开始,暂停,停止,快速播放,倒退等等。

1.                   打开:当选择一个文件打开是,可以直接使用m_avPlayer.put_URL(fileName);

为打开按钮添加消息响应函数,在函数中添加如下代码:

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();  

                m_avPlayer.put_URL(fileName);

        }

这样当选择一个播放文件后,media   player就会自动播放该文件了。

2.                   开始:为了实现播放控制,在OnInitDialog()中添加代码:

m_control   =   static_cast <CWMPControls> (m_avPlayer.get_controls());

然后为开始按钮添加消息响应函数,并在函数中添加代码:  

m_control.play();

3.                   暂停:m_control.pause();

4.                   停止:m_control.stop();

5.                   其他如倒退,快速播放,MSDN上有相应的函数,读者可依次自行解决。

到此,一个带有简单播放控制的播放器就完成。

 

l                   下面来实现播放列表。为实现播放列表控制,首先在OnInitDialog()中添加代码:

//创建一个播放列表

m_playlist   =   static_cast <CWMPPlaylist> (m_avPlayer.get_currentPlaylist());

然后将打开按钮的消息响应函数改为:

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();  

                //创建一个媒体

                m_media   =   static_cast <CWMPMedia> (m_avPlayer.newMedia(fileName));

                //将媒体添加到播放列表

                m_playlist.appendItem(m_media);

                //将列表添加到当前列表,以便实现自动播放

                m_avPlayer.put_currentPlaylist(m_playlist);

 

                m_set   =   (CWMPSettings)m_avPlayer.get_settings();

                //参数true设置自动播放,false不设置自动播放

m_set.put_autoStart(true);

                //将媒体的名字添加到列表控件

                m_listCtrl.InsertItem(0,   m_media.get_name());

        }

 

l                   接着是屏幕显示控制

m_avPlayer.put_fullScreen(true/false);

 

l                   使用播放列表自动播放文件,第一步:   需要在播放列表中添加媒体;第二步:将列表设置为当前播放列表;第三步:将播放设置为自动播放。

函数如下:

              //创建媒体

              m_media   =   static_cast <CWMPMedia> (m_avPlayer.newMedia(fileName));

        //将媒体追加到播放列表

m_playlist.appendItem(m_media);

//将类别设置为当前列表

        m_avPlayer.put_currentPlaylist(m_playlist);

        //设置自动播放

        m_setting.put_autoStart(true);

 

l                   播放信息的显示

可以通过CWMPMedia类获取相关的媒体信息。

获取播放文件名:media.get_name();

 

l                   其他,如鼠标,接盘事件响应,可添加相应的消息响应函数

要注意的是,在添加如鼠标一类的消息时,消息函数有个参数如nButton,它的值为1时是单击鼠标左键,2为单击鼠标右键消息,4为单击鼠标中键。等等。
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值