在安装了WindowsMediaPlayer9.0后,一个WindowsMediaPlayer ActiveX控件也同时被安装到系统并完成注册
。该控件为开发人员提供了WindowsMediaPlayer9.0具备的绝大部分功能,能够通过该控件比较轻松的实现对
WindowsMediaPlayer9.0的二次开发。
为使用该控件,首先要将其添加到工程。点击“Project”下“Add to Project”弹出的
“Components and Controls…”子菜单,并从弹出对话框中进入“Registered ActiveX Controls”目录查
找并添加Windows Media Player控件到工程。这时以CWMP开头的17个类将被添加到工程。在资源视图中将控件
拖动到用来播放多媒体的对话框上并通过ClassWizard将控件与CWMPPlayer4类对象建立关联。CWMPPlayer4类
提供了与Windows Media Player控件进行交互的基本方法,而且部分成员函数还能够进一步获取得到其他相关
类对象的实例。其中,SetUrl()和close()方法将能够打开和关闭指定的媒体文件。在打开文件之后,能够
通过控件上的自带按钮控制媒体的播放、暂停、停止以及对音量的控制等。如果需要在程序中控制媒体的播放
,可使用GetControls()函数返回CWMPControls类对象,并进一步调用该对象的play()、stop()、pause
()、fastForward()、fastReverse()等方法来完成播放、停止、暂停、快进、快退等相应动作;如果需
要在程序中对控件属性进行设置和更改,可在GetSettings()方法返回一个CWMPSettings类的对象后通过其
成员函数来完成相应的设置.
如果你已经添加了这个控件那么同时你需要两个类 CWMPPlayer4以及CWMPMedia
然后分别定义一个变量 player media 调用下面的函数
media=player.newMedia(文件路径);
media.GetName(); //文件名
media.GetDurationString());//时间
media.getItemInfo("Author");//艺术家
media.getItemInfo("FileSize");//文件大小
media.getItemInfo("FileType");//文件类型
media.getItemInfo("Genre");//流派
media.getItemInfo("Album");//专辑
VB
添加个TextBox控件, 把它的OLEDropMode设为1,添加以下代码:
Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As
Integer, x As Single, y As Single)
Dim strtemp As String
If Data.Files.Count > 0 Then
'// 取得当前拖过来的文件名
strtemp = Data.Files(1)
End If
WindowsMediaPlayer1.URL = strtemp
End Sub
这是用wmp的ocx的:
m_player.SetStretchToFit( TRUE );
m_player.GetSettings().SetAutoStart( TRUE );
m_player.GetSettings().SetEnableErrorDialogs( FALSE );
m_player.GetSettings().SetPlayCount( MAXLONG );
m_player.SetUrl( szPath );
m_player.SetUiMode("none");
由函数可以用啊:void put_URL(LPCTSTR newValue) 和 void put_URL(LPCTSTR newValue)
或者创建播放列表:
//获取当前播放列表
CWMPPlaylist m_playlist = static_cast<CWMPPlaylist>(m_WMPplayer.get_currentPlaylist());
CWMPMedia3 m_media = static_cast <CWMPMedia3>(m_WMPplayer.newMedia(_T
("E://Music//test.mp3")));
//将媒体添加到播放列表
m_playlist.appendItem(m_media);
//将列表添加到当前列表,以便播放
m_WMPplayer.put_currentPlaylist(m_playlist);
CWMPSettings2 m_set = (CWMPSettings2)m_WMPplayer.get_settings();
m_set.put_autoStart(true);
建立一个对话框 IDD_PLAYER_DIALOG
在对话框上单击右键,选择添加类,基类选择CDialog, 类名CPlayer,确定,生成CPlayer类
.
在对话框上单击右键,选择插入Activex控件,拖到底部,选择windows media player,确定
,控件被加入.
关闭资源视图.
选择菜单, 项目->添加类, 在模板中选择"在Activex控件中的MFC类".在"可用的Activex
控件"下拉菜单中选择"Windows Media Player", 在左下方的接口栏中出现可以选择的类
的接口,选择需要的接口即可,这里选择IWMPPlyaer4,单击完成生成类CWMPPlayer4.
打开资源视图,在对话框的wmp控件上单击右键,添加变量, 变量类型输入CWMPPlayer4,变
量名m_ctrlPlayer.
调用m_ctrlPlayer.put_url() 可以播放媒体文件. ------------
-------------------------------------------------------------
件——》新建——》项目,选择MFC应用程序——》名称为player——》确定。
点击应用程序类型——》基于对话框——》完成。
在DIALOG中右击——》插入ACTIVEX控件——》选Windows Media Player ,添加了Windows Media Player 控
件ID为IDC_OCX1。
对Windows Media Player控件右击——》添加变量——》变量名为m_wmplayer——》完成。
拉二个按钮到DIALOG中“打开”和“暂停”,双击“打开”输入以下代码:
// TODO: 在此添加控件通知处理程序代码
TCHAR szFileFilter[]= _T("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_wmplayer.put_URL(fileName);
}
到此时一切正常~
然后右击类视图/解决方案—〉添加类—〉选择“Active中的MFC类”—〉选择windows media player <1.0>选
择所有接口生成类。
在然后在对话框头文件中(playerDlg.h)添加了以下变量:
CWMPControls m_control;
在playerDlg.cpp的OnInitDialog()中添加代码:
m_control = static_cast <CWMPControls>(m_wmPlayer.get_controls());
双击“暂停”输入
// TODO: 在此添加控件通知处理程序代码
m_control.pause();
void CPlayerDlg::OnBnClickedButtonOpen()
{
// TODO: 在此添加控件通知处理程序代码
TCHAR szFileFilter[]= _T("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_conWMPlayer.put_URL(fileName);
}
}
void CPlayerDlg::OnBnClickedButtonStop()
{
// TODO: 在此添加控件通知处理程序代码
m_CWMPConcontrol.pause();
}
BOOL CPlayerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//todo
m_CWMPConcontrol=static_cast<CWMPControls>(m_conWMPlayer.get_controls());
}
//创建一个播放列表
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);
最近在做一个有关windows media player 控件的东西,刚开始做的时候,在网上找了很久都没找到相关的中
文文档。没办法,只好自己硬着头皮慢慢查看MSDN上的有关内容。由于vs2003与vc6有一定的区别,这也是我在
查找资料和使用控件时遇到的具到困难,同时也有很多网友遇到了同样的问题,为了使大家以后在遇到同样问
题是能有个比较有帮助的中文说明,小弟就将自己前段时间总结的东西贡献出来,希望对各位有所帮助。
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为单击鼠标中键。等等。
char BASED_CODE szFilter[] = "Play Files(*.avi)|*.avi|Play Files(*.mp3)|*.mp3|All Files
(*.*)|*.*||";
CFileDialog fDlg(TRUE,"","",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);
if(fDlg.DoModal() == IDOK)
{
CString path = fDlg.GetPathName();//获取播放文件的全路径
m_media.SetUrl(path);//在添加的Windows Media Player ActiveX控件里播放文件
// m_media.openPlayer(path);//这个命令是打开电脑的Media Player 程序,然后播放文件
}
CSliderCtrl::CSliderCtrl 构造函数。
CSliderCtrl::Create 创建轨道条。
CSliderCtrl::GetLineSize 取得一行的大小,对应键盘的方向键。
CSliderCtrl::SetLineSize 设置一行的大小。
CSliderCtrl::GetPageSize 取得一页的大小,对应PageUp、PageDown键。
CSliderCtrl::SetPageSize 设置一页的大小。
CSliderCtrl::GetRangeMax 取得上限,就是最大值。
CSliderCtrl::GetRangeMin 取得下限,就是最小值。
CSliderCtrl::GetRange 取得上下限。
CSliderCtrl::SetRangeMin 设置最小值,bRedraw表示是否重绘。
CSliderCtrl::SetRangeMax 设置最大值,bRedraw表示是否重绘。
CSliderCtrl::SetRange 设置上下限,bRedraw表示是否重绘。
CSliderCtrl::GetSelection 取得轨道条的选择范围,nMin存放起始位置,nMax存放结束位置。
CSliderCtrl::SetSelection 设置轨道条的选择范围,此范围会高亮显示。
CSliderCtrl::GetChannelRect 取得Channel的范围,Channel是沟、水道的意思。它在刻度之上,供
Thumb移动的区域。
CSliderCtrl::GetThumbRect 取得“拇指”的范围,“拇指”就是我们可以通过鼠标拖动的那个小方块
。
CSliderCtrl::GetPos 取得轨道条的当前位置。
CSliderCtrl::SetPos 设置轨道条的当前位置。
CSliderCtrl::GetNumTics 取得刻度的数量。
CSliderCtrl::GetTicArray 取得所有刻度的位置。
CSliderCtrl::GetTic 取得第 nTic 个刻度的位置,无论此刻度是否显示。首刻度和尾刻度由系统处理,
不在此列。假定范围是10到100,那么GetTic(0)的值是11,GetTic(1)值是12。
CSliderCtrl::GetTicPos 取得第 nTic 个刻度的物理位置,客户区坐标。
CSliderCtrl::SetTic 在某个刻度的位置的显示一个刻度。
CSliderCtrl::SetTicFreq 设置显示刻度的间隔,假定范围是0到100,SetTicFreq(20)后,会在20、40
、60、80显示刻度,加上系统的两个刻度0、100,总共6个。
CSliderCtrl::GetBuddy 取得关联窗口。
CSliderCtrl::SetBuddy 设置关联窗口。
CSliderCtrl::GetToolTips 取得提示条。
CSliderCtrl::SetToolTips 设置提示条。
CSliderCtrl::SetTipSide 设置提示条的位置。
CSliderCtrl::ClearSel 清空当前选择。
CSliderCtrl::VerifyPos 确认当前位置是否合法。
CSliderCtrl::ClearTics 清除当前刻度。
。该控件为开发人员提供了WindowsMediaPlayer9.0具备的绝大部分功能,能够通过该控件比较轻松的实现对
WindowsMediaPlayer9.0的二次开发。
为使用该控件,首先要将其添加到工程。点击“Project”下“Add to Project”弹出的
“Components and Controls…”子菜单,并从弹出对话框中进入“Registered ActiveX Controls”目录查
找并添加Windows Media Player控件到工程。这时以CWMP开头的17个类将被添加到工程。在资源视图中将控件
拖动到用来播放多媒体的对话框上并通过ClassWizard将控件与CWMPPlayer4类对象建立关联。CWMPPlayer4类
提供了与Windows Media Player控件进行交互的基本方法,而且部分成员函数还能够进一步获取得到其他相关
类对象的实例。其中,SetUrl()和close()方法将能够打开和关闭指定的媒体文件。在打开文件之后,能够
通过控件上的自带按钮控制媒体的播放、暂停、停止以及对音量的控制等。如果需要在程序中控制媒体的播放
,可使用GetControls()函数返回CWMPControls类对象,并进一步调用该对象的play()、stop()、pause
()、fastForward()、fastReverse()等方法来完成播放、停止、暂停、快进、快退等相应动作;如果需
要在程序中对控件属性进行设置和更改,可在GetSettings()方法返回一个CWMPSettings类的对象后通过其
成员函数来完成相应的设置.
如果你已经添加了这个控件那么同时你需要两个类 CWMPPlayer4以及CWMPMedia
然后分别定义一个变量 player media 调用下面的函数
media=player.newMedia(文件路径);
media.GetName(); //文件名
media.GetDurationString());//时间
media.getItemInfo("Author");//艺术家
media.getItemInfo("FileSize");//文件大小
media.getItemInfo("FileType");//文件类型
media.getItemInfo("Genre");//流派
media.getItemInfo("Album");//专辑
VB
添加个TextBox控件, 把它的OLEDropMode设为1,添加以下代码:
Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As
Integer, x As Single, y As Single)
Dim strtemp As String
If Data.Files.Count > 0 Then
'// 取得当前拖过来的文件名
strtemp = Data.Files(1)
End If
WindowsMediaPlayer1.URL = strtemp
End Sub
这是用wmp的ocx的:
m_player.SetStretchToFit( TRUE );
m_player.GetSettings().SetAutoStart( TRUE );
m_player.GetSettings().SetEnableErrorDialogs( FALSE );
m_player.GetSettings().SetPlayCount( MAXLONG );
m_player.SetUrl( szPath );
m_player.SetUiMode("none");
由函数可以用啊:void put_URL(LPCTSTR newValue) 和 void put_URL(LPCTSTR newValue)
或者创建播放列表:
//获取当前播放列表
CWMPPlaylist m_playlist = static_cast<CWMPPlaylist>(m_WMPplayer.get_currentPlaylist());
CWMPMedia3 m_media = static_cast <CWMPMedia3>(m_WMPplayer.newMedia(_T
("E://Music//test.mp3")));
//将媒体添加到播放列表
m_playlist.appendItem(m_media);
//将列表添加到当前列表,以便播放
m_WMPplayer.put_currentPlaylist(m_playlist);
CWMPSettings2 m_set = (CWMPSettings2)m_WMPplayer.get_settings();
m_set.put_autoStart(true);
建立一个对话框 IDD_PLAYER_DIALOG
在对话框上单击右键,选择添加类,基类选择CDialog, 类名CPlayer,确定,生成CPlayer类
.
在对话框上单击右键,选择插入Activex控件,拖到底部,选择windows media player,确定
,控件被加入.
关闭资源视图.
选择菜单, 项目->添加类, 在模板中选择"在Activex控件中的MFC类".在"可用的Activex
控件"下拉菜单中选择"Windows Media Player", 在左下方的接口栏中出现可以选择的类
的接口,选择需要的接口即可,这里选择IWMPPlyaer4,单击完成生成类CWMPPlayer4.
打开资源视图,在对话框的wmp控件上单击右键,添加变量, 变量类型输入CWMPPlayer4,变
量名m_ctrlPlayer.
调用m_ctrlPlayer.put_url() 可以播放媒体文件. ------------
-------------------------------------------------------------
件——》新建——》项目,选择MFC应用程序——》名称为player——》确定。
点击应用程序类型——》基于对话框——》完成。
在DIALOG中右击——》插入ACTIVEX控件——》选Windows Media Player ,添加了Windows Media Player 控
件ID为IDC_OCX1。
对Windows Media Player控件右击——》添加变量——》变量名为m_wmplayer——》完成。
拉二个按钮到DIALOG中“打开”和“暂停”,双击“打开”输入以下代码:
// TODO: 在此添加控件通知处理程序代码
TCHAR szFileFilter[]= _T("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_wmplayer.put_URL(fileName);
}
到此时一切正常~
然后右击类视图/解决方案—〉添加类—〉选择“Active中的MFC类”—〉选择windows media player <1.0>选
择所有接口生成类。
在然后在对话框头文件中(playerDlg.h)添加了以下变量:
CWMPControls m_control;
在playerDlg.cpp的OnInitDialog()中添加代码:
m_control = static_cast <CWMPControls>(m_wmPlayer.get_controls());
双击“暂停”输入
// TODO: 在此添加控件通知处理程序代码
m_control.pause();
void CPlayerDlg::OnBnClickedButtonOpen()
{
// TODO: 在此添加控件通知处理程序代码
TCHAR szFileFilter[]= _T("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_conWMPlayer.put_URL(fileName);
}
}
void CPlayerDlg::OnBnClickedButtonStop()
{
// TODO: 在此添加控件通知处理程序代码
m_CWMPConcontrol.pause();
}
BOOL CPlayerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//todo
m_CWMPConcontrol=static_cast<CWMPControls>(m_conWMPlayer.get_controls());
}
//创建一个播放列表
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);
最近在做一个有关windows media player 控件的东西,刚开始做的时候,在网上找了很久都没找到相关的中
文文档。没办法,只好自己硬着头皮慢慢查看MSDN上的有关内容。由于vs2003与vc6有一定的区别,这也是我在
查找资料和使用控件时遇到的具到困难,同时也有很多网友遇到了同样的问题,为了使大家以后在遇到同样问
题是能有个比较有帮助的中文说明,小弟就将自己前段时间总结的东西贡献出来,希望对各位有所帮助。
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为单击鼠标中键。等等。
char BASED_CODE szFilter[] = "Play Files(*.avi)|*.avi|Play Files(*.mp3)|*.mp3|All Files
(*.*)|*.*||";
CFileDialog fDlg(TRUE,"","",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);
if(fDlg.DoModal() == IDOK)
{
CString path = fDlg.GetPathName();//获取播放文件的全路径
m_media.SetUrl(path);//在添加的Windows Media Player ActiveX控件里播放文件
// m_media.openPlayer(path);//这个命令是打开电脑的Media Player 程序,然后播放文件
}
CSliderCtrl::CSliderCtrl 构造函数。
CSliderCtrl::Create 创建轨道条。
CSliderCtrl::GetLineSize 取得一行的大小,对应键盘的方向键。
CSliderCtrl::SetLineSize 设置一行的大小。
CSliderCtrl::GetPageSize 取得一页的大小,对应PageUp、PageDown键。
CSliderCtrl::SetPageSize 设置一页的大小。
CSliderCtrl::GetRangeMax 取得上限,就是最大值。
CSliderCtrl::GetRangeMin 取得下限,就是最小值。
CSliderCtrl::GetRange 取得上下限。
CSliderCtrl::SetRangeMin 设置最小值,bRedraw表示是否重绘。
CSliderCtrl::SetRangeMax 设置最大值,bRedraw表示是否重绘。
CSliderCtrl::SetRange 设置上下限,bRedraw表示是否重绘。
CSliderCtrl::GetSelection 取得轨道条的选择范围,nMin存放起始位置,nMax存放结束位置。
CSliderCtrl::SetSelection 设置轨道条的选择范围,此范围会高亮显示。
CSliderCtrl::GetChannelRect 取得Channel的范围,Channel是沟、水道的意思。它在刻度之上,供
Thumb移动的区域。
CSliderCtrl::GetThumbRect 取得“拇指”的范围,“拇指”就是我们可以通过鼠标拖动的那个小方块
。
CSliderCtrl::GetPos 取得轨道条的当前位置。
CSliderCtrl::SetPos 设置轨道条的当前位置。
CSliderCtrl::GetNumTics 取得刻度的数量。
CSliderCtrl::GetTicArray 取得所有刻度的位置。
CSliderCtrl::GetTic 取得第 nTic 个刻度的位置,无论此刻度是否显示。首刻度和尾刻度由系统处理,
不在此列。假定范围是10到100,那么GetTic(0)的值是11,GetTic(1)值是12。
CSliderCtrl::GetTicPos 取得第 nTic 个刻度的物理位置,客户区坐标。
CSliderCtrl::SetTic 在某个刻度的位置的显示一个刻度。
CSliderCtrl::SetTicFreq 设置显示刻度的间隔,假定范围是0到100,SetTicFreq(20)后,会在20、40
、60、80显示刻度,加上系统的两个刻度0、100,总共6个。
CSliderCtrl::GetBuddy 取得关联窗口。
CSliderCtrl::SetBuddy 设置关联窗口。
CSliderCtrl::GetToolTips 取得提示条。
CSliderCtrl::SetToolTips 设置提示条。
CSliderCtrl::SetTipSide 设置提示条的位置。
CSliderCtrl::ClearSel 清空当前选择。
CSliderCtrl::VerifyPos 确认当前位置是否合法。
CSliderCtrl::ClearTics 清除当前刻度。