www.gusucode.com > 用VS2008+ATL开发可以显示Gif的ActiveX控件源码源码程序 > 用VS2008+ATL开发可以显示Gif的ActiveX控件源码/用VS2008+ATL开发Gif的ActiveX控件/用VS2008+ATL开发Gif的ActiveX控件/GifSolution/GifAnimate/GifAniAtlWindow.cpp

    // GifAniAtlWindow.cpp : CGifAniAtlWindow 的实现
#include "stdafx.h"
#include "GifAniAtlWindow.h"


// CGifAniAtlWindow

STDMETHODIMP CGifAniAtlWindow::Play(void)
{
	VPR_E_FAIL(m_gif);

	m_gif->Play();
	return S_OK;
}

STDMETHODIMP CGifAniAtlWindow::Stop(void)
{
	VPR_E_FAIL(m_gif);

	m_gif->Stop();
	return S_OK;
}

STDMETHODIMP CGifAniAtlWindow::Pause(void)
{
	VPR_E_FAIL(m_gif);

	m_gif->Pause();
	return S_OK;
}

STDMETHODIMP CGifAniAtlWindow::Continue(void)
{
	VPR_E_FAIL(m_gif);

	m_gif->Continue();
	return S_OK;
}

STDMETHODIMP CGifAniAtlWindow::PrevFrame(void)
{
	VPR_E_FAIL(m_gif);

	m_gif->PrevFrame();
	return S_OK;
}

STDMETHODIMP CGifAniAtlWindow::NextFrame(void)
{
	VPR_E_FAIL(m_gif);

	m_gif->NextFrame();
	return S_OK;
}

STDMETHODIMP CGifAniAtlWindow::IsPlaying(VARIANT_BOOL* bPlaying)
{
	VPR_E_FAIL(m_gif);
	VPR_OUT_E_FAIL(bPlaying);

	*bPlaying = m_gif->IsPlaying();
	return S_OK;
}

STDMETHODIMP CGifAniAtlWindow::LoadGifFromFile(BSTR bstrFile)
{
	VPR_E_FAIL(m_gif);

	if (m_gif->LoadGifFromFile(bstrFile))
		return S_OK;

	return E_FAIL;
}

STDMETHODIMP CGifAniAtlWindow::LoadGifFromStream(IUnknown* pStream)
{
	VPR_E_FAIL(m_gif);
	VPR_IN_E_FAIL(pStream);

	if (m_gif->LoadGifFromStream(pStream))
		return S_OK;

	return E_FAIL;
}

STDMETHODIMP CGifAniAtlWindow::get_Loop(LONG* pVal)
{
	VPR_E_FAIL(m_gif);
	VPR_OUT_E_FAIL(pVal);

	*pVal = m_gif->GetLoop();
	return S_OK;
}

STDMETHODIMP CGifAniAtlWindow::put_Loop(LONG newVal)
{
	VPR_E_FAIL(m_gif);

	m_gif->PutLoop(newVal);
	return S_OK;
}

STDMETHODIMP CGifAniAtlWindow::get_DelayTimeFactor(DOUBLE* pVal)
{
	VPR_E_FAIL(m_gif);

	*pVal = m_gif->GetDelayTimeFactor();
	return S_OK;
}

STDMETHODIMP CGifAniAtlWindow::put_DelayTimeFactor(DOUBLE newVal)
{
	VPR_E_FAIL(m_gif);

	m_gif->PutDelayTimeFactor(newVal);
	return S_OK;
}

STDMETHODIMP CGifAniAtlWindow::get_PlayDirection(AniPlayDirection* pVal)
{
	VPR_E_FAIL(m_gif);
	VPR_OUT_E_FAIL(pVal);

	*pVal = m_gif->GetPlayDirection();
	return S_OK;
}

STDMETHODIMP CGifAniAtlWindow::put_PlayDirection(AniPlayDirection newVal)
{
	VPR_E_FAIL(m_gif);

	m_gif->PutPlayDirection(newVal);
	return S_OK;
}

LRESULT CGifAniAtlWindow::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	return 0;
}

LRESULT CGifAniAtlWindow::OnLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
{
	WORD xPos = LOWORD(lParam);  // horizontal position of cursor
	WORD yPos = HIWORD(lParam);  // vertical position of cursor

	Fire_Click(xPos, yPos);

	return 0;
}