使用Windows Media Play-ActiveX控件

以ActiveX控件——媒体播放器为例,说明组件应用之功能强大和使用的简单方便。

媒体播放器(Media Player)DirectX Media中的一个ActiveX控件,支持大多数标准流媒体格式的播放,如ASFAVIMPEGWAVMIDIMP3WMA等,但对RMMOV支持得不够。

创建一个基于对话框的MFC应用程序MPlay

为了能够在项目中使用媒体播放器控件,必须先将媒体播放器控件添加到对话框编辑器工具箱中。(这需要在你的系统中,已经正确安装了微软公司的媒体播放器)

1. 添加ActiveX控件

(VC++ 6.0)

工程-添加到工程-> components and controls  选择Windows Media Player

https://p-blog.csdn.net/images/p_blog_csdn_net/touzani/303255/o_mplay.jpg

 插入到工具箱,再拖到对话框中

( VC++2005方法)

1 打开工具箱窗口,在其空白区单击鼠标右键,在弹出菜单中选中“选择项”菜单项;也可以选VS的“工具/选择工具箱项”菜单项;在弹出的“选择工具箱项”对话框中,选择“COM组件”页;滚动到列表框的底部,选中“Windows Media Player”项,按“确定”钮,关闭对话框。系统会将一个“<!--[if !vml]--><!--[endif]--> Windows Media Player”控件,加入到工具箱的对话框编辑器栏的底部。这样你就可以将其加入到对话框资源中了。

2 你也可以简单地在对话框资源中单击鼠标右键,在弹出菜单中选中“插入ActiveX控件”菜单项;在打开的“插入ActiveX控件”对话框中,滚动列表框,选择底部的“Windows Media Player”项,按“确定”钮,关闭对话框。则系统会将其自动加入到对话框资源中(但这样是不会在工具箱中添加对应控件的)。

)
2)设计对话框

在对话框中调整好媒体播放器控件的位置和大小,打开属性窗口,设置其IDIDC_MP。去掉对话框中“取消”钮,将“确定”钮中的文字改为“打开(&O)”,并修改其IDIDC_LOAD(用来打开文件对话框,选择播放的流媒体文件,并将该文件的路径名传递给媒体播放器),而播放、暂停、停止等图形按钮控件中已经有了。
在你为对话框加入媒体播放器控件后,
MFC会自动在资源文件MPlay.rc中添加对它的复杂初始化代码.

还可以按属性窗口工具条上的属性页按钮,在弹出的“Windows Media Player属性”对话框中,进行各种属性设置,例如选中“按比例伸展”和“全屏播放”复选框。

3)添加控件变量

为了能使用媒体播放器控件,我们必须为该控件添加一个控件型类变量 m_ctrlMPlayer;

同时给打开按钮添加了变量m_ctrlLoad.

4)使用控件

这里所要做的工作,只是在CMPlayDlg类中,为“装入”按钮添加单击事件BN_CLICKED的处理程序OnBnClickedLoad,并在该函数中打开公用文件对话框,获取用户选择的媒体文件名,并将该文件的路径传递给媒体播放器类对象:

 

VC++ 6.0 代码:

void  CMPlayDlg::OnBnClickedLoad()  ... {

       CFileDialog dlg(TRUE, NULL, L
"*.*", OFN_FILEMUSTEXIST,

              
"Active Streaming Format(*.asf)|*.asf|"      

              
"Audio Video Interleave Format(*.avi)|*.avi|"

              
"RealAudio/RealVideo(*.rm)|*.rm|"

              
"Wave Audio(*.wav)|*.wav|"

              
"MIDI File(*.mid)|*.mid|"

              
"所有文件(*.*)|*.*||");

       
if (dlg.DoModal() == IDOK) ...{

              
//m_ctrlMPlayer.put_stretchToFit(TRUE); // 伸缩画面,使其适合播放窗口

              
// …… 可以在此进行各种其他设置

              m_ctrlMPlayer.SetUrl(dlg.GetPathName()); 
// 传递媒体文件到播放器

                             


       }


}

VC++ 2005 代码:
void  CMPlayDlg::OnBnClickedLoad()  ... {

       CFileDialog dlg(TRUE, NULL, L"*.*", OFN_FILEMUSTEXIST,

              L"Active Streaming Format(*.asf)|*.asf|"

              L"Audio Video Interleave Format(*.avi)|*.avi|"

              L"RealAudio/RealVideo(*.rm)|*.rm|"

              L"Wave Audio(*.wav)|*.wav|"

              L"MIDI File(*.mid)|*.mid|"

              L"所有文件(*.*)|*.*||"
);

       
if (dlg.DoModal() == IDOK) ...{

              
//m_ctrlMPlayer.put_stretchToFit(TRUE); // 伸缩画面,使其适合播放窗口

              
// …… 可以在此进行各种其他设置

              m_ctrlMPlayer.put_URL(dlg.GetPathName()); 
// 传递媒体文件到播放器

       }


}


在该函数中设置了若干流媒体文件过虑器,创建打开文件公用对话框对象,让用户选择要播放的流媒体文件,并将该文件的路径通过调用CMp类的成员函数Set_URL传递给媒体播放器。

注意,媒体播放器控件有各种不同的版本,对应的函数名也可能有所不同。如果找不到类似功能的函数,说明你系统中安装的媒体播放器控件有问题,可以点击这里下栽mp.h头文件,用它替代你的同名文件。

现在程序可以编译运行了...

5)改变播放器窗口大小

要使程序可以让用户任意改变播放器窗口的大小,则需要设置对话框(位于属性窗口顶部的外观栏中)的边框属性borderResizing(可调整大小),该属性的缺省值为Dialog Frame(对话框边框),是不能调整大小的。还可以同时设置Maximize BoxMinimize Box属性为True

为了使媒体播放器的窗口随对话框而改变大小,需要为项目的对话框类添加WM_SIZE的消息响应函数OnSize。并在该函数中,调用CWnd的成员函数

void MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE);

来改变播放器窗口的大小(注意:媒体播放器类是CWnd的派生类)。注意也要把打开按钮一起移动.

代码如下:

void  CMplayDlg::OnSize(UINT nType,  int  cx,  int  cy)

... {

       CDialog::OnSize(nType, cx, cy);

       m_ctrlMPlayer.MoveWindow(
00, cx-40, cy);

       m_ctrlLoad.MoveWindow(cx
-40,0, cx, cy); // 改变打开按钮位置

}

还可以为对话框类再添加WM_KEYUP消息响应函数。在该函数中,响应用户按键Ctrl+L|O|F,打开公用文件对话框,让用户选择媒体文件,并将其传送给播放器对象(后面这部分代码与前面的一样)。

代码如下:(VC++ 2005)


void CMPlayDlg::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)  ... {

       if ((GetKeyState(VK_CONTROL) & 1<<15) &&

              (nChar == 'L' || nChar == 'O' || nChar == 'F')) ...{

              CFileDialog dlg(TRUE, NULL, L"*.*", OFN_FILEMUSTEXIST,

                     L"Active Streaming Format(*.asf)|*.asf|"

                     L"Audio Video Interleave Format(*.avi)|*.avi|"

                     L"RealAudio/RealVideo(*.rm)|*.rm|"

                     L"Wave Audio(*.wav)|*.wav|"

                     L"MIDI File(*.mid)|*.mid|"

                     L"所有文件(*.*)|*.*||");

              if (dlg.DoModal() == IDOK) ...{

                     m_ctrlMPlayer.put_stretchToFit(TRUE); // 伸缩画面,使其适合播放窗口

                     CString fn = L"MPlayer : " + dlg.GetFileName(); // 构造程序标题

                     SetWindowText(fn); // 设置程序窗口的标题

                     m_ctrlMPlayer.put_URL(dlg.GetPathName());

              }


       }


       CDialog::OnKeyUp(nChar, nRepCnt, nFlags);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值