⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 video.cpp

📁 冰人引擎,本2d游戏引擎定位于游戏次中层引擎。他不像CDX等引擎那样
💻 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 + -