1.建立一个基于对话框的程序,命名为Video。
2.添加activeX控件Window Media Player,ID为IDC_OCX1,添加一个Edit控件,命名IDC_EDIT_FILENAME;
右键单击
点选择项
选COM组件,在列表中找到Window Media Player勾选,添加到工具箱
工具箱中多了一个Window media Player
3.为该控件添加实现类;
4.在VideoDlg.h中添加#include“CWMPPlayer.h”
然后添加成员变量
我们没有COcx1类,将这个类改为CWMPPlayer4,如下
4.接下来我们开始设置菜单了
为这个菜单添加事件响应
代码如下
void CVideoDlg::OnBnClickedOpen() { // TODO: 在此添加控件通知处理程序代码 CString m_str=_T("(*.avi)|*.avi"); CFileDialog FileDlg(TRUE, NULL, L"*.*", OFN_FILEMUSTEXIST, m_str);//打开文件 if (FileDlg.DoModal() == IDOK) { m_PlayVideo.put_URL(FileDlg.GetPathName());//播放文件 m_FileName.SetWindowTextW(FileDlg.GetPathName());//设置编辑框文本 } }
这样一个简单的播放器就实现了,但是有很多不完善的地方,接下来,我们添加一些其他的功能
5.添加WM_ERASEBKGND消息和WM_SIZE消息
我们要让这个控件能根据窗口大小改变自己的大小
在CVideoDlg类中添加公有成员
CRect m_rect;
在WM_SIZE消息的映射函数中添加如下代码
void CVideoDlg::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 GetClientRect(m_rect);//获取窗口客户区大小 }
在WM_ERASEBKGND消息的映射函数中添加如下代码
BOOL CVideoDlg::OnEraseBkgnd(CDC* pDC) { // TODO: 在此添加消息处理程序代码和/或调用默认值 //调整两控件的位置 m_PlayVideo.MoveWindow(m_rect.left, m_rect.top + 30, m_rect.right, m_rect.bottom - 30); m_FileName.MoveWindow(m_rect.left, m_rect.top , m_rect.right,30); return false; }
大功告成了,成功实现预期目标
6.添加功能改变控件风格
添加GDI+支持,这个我不说了,自己看前面的博客
在CWMPPlayer4类中添加共有成员
RectF rect;
添加WM_MOUSEMOVE消息
void CVideoDlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 PointF pt(static_cast<float>(point.x), static_cast<float>(point.y)); if (rect.Contains(pt)) { m_PlayVideo.put_uiMode(_T("Full")); } else { m_PlayVideo.put_uiMode(_T("None")); } CDialogEx::OnMouseMove(nFlags, point); }
四种风格分别为Full,None,Mini,Invisible,有机会的自己试一下
调试
鼠标移动到最下面是出现进度条和其他按钮