在中Visual Studio .NET 2003利用DirectShow播放媒体文件(三)
2004-04-12 12:28
537 查看
在CPlayWndDlg的构造函数中添加初始化代码
由于一些和窗体控制有关的初始化代码不能放在构造函数中进行,我们将其放在CPlayWndDlg::OnInitDialog()中,我们必须在此必须对CPlayWndDlg添加WS_CLIPCHILDREN 的Style,因为在我们的应用中把视频窗体作为CPlayWndDlg的一个子窗体来使用的,这是非常重要的,许多开发人员在刚开始使用DirectShow时,父窗体的Style没有设置正确,造成视频不能正确显示,代码如下:
添加相应的清除代码,重载CPlayWndDlg的DestoryWindow方法,如下:
7.修改CPlayWndDlg::OnPaint(),由于现在视频显示区域必须由我们自己进行重画:
添加浏览、播放、暂停、关闭四按钮的相应事件响应函数,同时在CPlayWndDlg中添加如下四个私有方法:
void MoveVideoWindow(void);
void CleanUp(void);
BOOL Stop(void);
BOOL Play(void);
上述方法的实现如下:
CPlayWndDlg::CPlayWndDlg(CWnd* pParent /*=NULL*/)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> : CDialog(CPlayWndDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_pGraph = NULL; m_pMediaControl = NULL; m_pEvent = NULL; m_pMediaSeeking = NULL; m_strMediaFile = ""; m_isPlaying = FALSE; } |
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 Modify 4000 Style(0, WS_CLIPCHILDREN); ((CEdit*)GetDlgItem(IDC_MEDIAFILE_EDIT))->SetReadOnly(TRUE); return TRUE; // 除非设置了控件的焦点,否则返回 TRUE } |
BOOL CPlayWndDlg::DestroyWindow() { // TODO: 在此添加专用代码和/或调用基类 if(m_pGraph) m_pGraph->Release(); if(m_pMediaControl) m_pMediaControl->Release(); if(m_pEvent) m_pEvent->Release(); if(m_pMediaSeeking) m_pMediaSeeking->Release(); m_pGraph = NULL; m_pMediaControl = NULL; m_pEvent = NULL; m_pMediaSeeking = NULL; return CDialog::DestroyWindow(); } |
void CPlayWndDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { if(m_isPlaying == FALSE) { CClientDC dc(GetDlgItem(IDC_VW_FRAME)); dc.SetBkColor(RGB(0,0,0)); CRect rc; GetDlgItem(IDC_VW_FRAME)->GetClientRect(rc); //ClientToScreen(rc); dc.FillRect(rc, CBrush::FromHandle((HBRUSH)GetStockObject(BLACK_BRUSH))); GetDlgItem(IDC_VW_FRAME)->Invalidate(); } CDialog::OnPaint(); } } |
void MoveVideoWindow(void);
void CleanUp(void);
BOOL Stop(void);
BOOL Play(void);
上述方法的实现如下:
相关文章推荐
- 在中Visual Studio .NET 2003利用DirectShow播放媒体文件(一)
- 在中Visual Studio .NET 2003利用DirectShow播放媒体文件(二)
- 在中Visual Studio .NET 2003利用DirectShow播放媒体文件(四)
- 在中Visual Studio .NET 2003利用DirectShow播放媒体文件(五)
- 利用Visual Studio .Net集成开发环境进行批量文件中的字符替换
- 在控制台编译Visual Studio .NET 2003的工程文件或解决方案文件
- Microsoft® Visual Studio® .NET 2003 自述文件
- win8下在microsoft visual studio 2012利用ODP.NET连接ORACLE 12c
- [英文]利用Visual Studio.NET 进行 ASP.NET的WEB开发
- 转CSDN:播放媒体文件_ASP.NET播放视频文件,开源代码
- Microsoft® Visual Studio® .NET™ 2003 Service Pack 1
- ASP.NET播放视频文件-C#中的媒体播放类
- Microsoft Visual Studio .NET 2003制作安装程序
- 安装Visual Studio.net 2003总是会收到“一个安装程序检测到另一个程序需要重新启动计算机”的错误消息
- 水晶报表注册码(Visual Studio .NET 2003 自带版本)
- Visual Studio.net 2003安装提示重启问题
- asp.net利用jquery播放mp3文件
- Visual Studio .NET 2003 无法创建或打开应用程序的解决方案
- Visual Studio .net 2003 中所有的功能快捷键
- 安装Visual Studio.net 2003时出现的1309错误