📄 video.cpp
字号:
#include "StdAfx.h"
#include "video.h"
CVideo::CVideo(void)
{
m_bIsPlay = false;
m_pGraph = NULL;
m_pMediaControl = NULL;
m_pEvent = NULL;
m_pVW = NULL;
}
CVideo::~CVideo(void)
{
Destroy();
}
void CVideo::Destroy(void)
{
SAFE_RELEASE(m_pMediaControl);
SAFE_RELEASE(m_pEvent);
SAFE_RELEASE(m_pGraph);
SAFE_RELEASE(m_pVW);
CoUninitialize();
m_bIsPlay = false;
}
bool CVideo::Play(LPCTSTR strFile, HWND hWnd)
{
if(m_bIsPlay)
{
DebugMsg("该文件正在播放中\n");
return false;
}
WCHAR wstrFile[255];
MultiByteToWideChar(CP_ACP, 0, strFile, -1, wstrFile,255);
CoInitialize(NULL);
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pGraph);
m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pMediaControl);
m_pGraph->QueryInterface(IID_IMediaEvent, (void **)&m_pEvent);
m_pGraph->QueryInterface(IID_IVideoWindow, (void **)&m_pVW);
if(FAILED(m_pEvent->SetNotifyWindow((OAHWND)hWnd, WM_GRAPHNOTIFY, 0)))
{
DebugMsg("设置事件错误\n");
return false;
}
if(FAILED(m_pGraph->RenderFile(wstrFile, NULL)))
{
DebugMsg("渲染avi出错\n");
return false;
}
m_pVW->put_MessageDrain((OAHWND) hWnd);
m_pVW->put_FullScreenMode(OATRUE);
m_bIsPlay = true;
m_pMediaControl->Run();
return true;
}
bool CVideo::ControlProc(void)
{
LONG evCode, evParam1, evParam2;
while(SUCCEEDED(m_pEvent->GetEvent(&evCode, (LONG_PTR *) &evParam1,(LONG_PTR *) &evParam2, 0)))
{
m_pEvent->FreeEventParams(evCode, evParam1, evParam2);
if(EC_COMPLETE == evCode)
{
Stop();
return false;
}
}
return true;
}
void CVideo::Stop(void)
{
if(m_bIsPlay)
{
m_pEvent->SetNotifyFlags(AM_MEDIAEVENT_NONOTIFY);
m_pMediaControl->Stop();
m_pGraph->Abort();
Destroy();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -