【VC开源代码栏目提醒】:网学会员为需要VC开源代码的朋友们搜集整理了GIF89A.CPP相关资料,希望对各位网友有所帮助!
// Gif89a.cpp : Implementation of CGif89a
#include "stdafx.h"
#include "Gif89.h"
#include "Gif89a.h"
#include<stdio.h>
DWORD WINAPI ThreadFunc(CGif89a* ptr);
BOOL CALLBACK DialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
/////////////////////////////////////////////////////////////////////////////
// CGif89a
HRESULT CGif89a::OnDraw(ATL_DRAWINFO& di)
{
GetAmbientUserMode(m_bRunMode);
if(!m_bRunMode)
{
RECT& rc = *(RECT*)di.prcBounds;
OLE_COLOR backcolor;
COLORREF cl;
HBRUSH br;
HBITMAP bmp,oldbitmap;
if(m_bGlass==FALSE)
{
HPALETTE pal;
GetAmbientPalette(pal);
GetAmbientBackColor(backcolor);
OleTranslateColor(backcolor,pal,&cl);
br=CreateSolidBrush(cl);
FillRect(di.hdcDraw,&rc,br);
DeleteObject(br);
}
m_hDC=di.hdcDraw;
bmp=FirstImage();
if(bmp!=0)
{
HDC dc;
dc=CreateCompatibleDC(di.hdcDraw);
oldbitmap=(HBITMAP)SelectObject(dc,bmp);
::BitBlt(di.hdcDraw,rc.left+m_iLeft,rc.top+m_iTop,m_iWidth,m_iHeight,dc,0,0,SRCCOPY);
SelectObject(dc,oldbitmap);
DeleteObject(bmp);
DeleteDC(dc);
}
else
{
DrawText(di.hdcDraw, _T("Gif Control"), -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
m_pcGifTrack=m_pcGif;
m_iTotalReadByte=0;
}
else
{
if((flag==0)&&(m_bAutoStart!=FALSE))
{
flag=1;
OLE_COLOR backcolor;
RECT& rc = *(RECT*)di.prcBounds;
HBRUSH br;
COLORREF cl;
if(m_bGlass==FALSE)
{
HPALETTE pal;
GetAmbientPalette(pal);
GetAmbientBackColor(backcolor);
OleTranslateColor(backcolor,pal,&cl);
br=CreateSolidBrush(cl);
FillRect(di.hdcDraw,&rc,br);
DeleteObject(br);
}
Play();
return S_OK;
}
if((flag==0)&&(m_bAutoStart==FALSE))
{
OLE_COLOR backcolor;
HBRUSH br;
COLORREF cl;
if(m_bGlass==FALSE)
{
RECT& rc = *(RECT*)di.prcBounds;
HPALETTE pal;
GetAmbientPalette(pal);
GetAmbientBackColor(backcolor);
OleTranslateColor(backcolor,pal,&cl);
br=CreateSolidBrush(cl);
FillRect(di.hdcDraw,&rc,br);
DeleteObject(br);
}
return S_OK;
}
if(m_hRedrawBitmap!=0)
{
while(m_bLockBitmap);
m_bLockBitmap=TRUE;
HBITMAP old;
HBRUSH br;
OLE_COLOR backcolor;
RECT& rc = *(RECT*)di.prcBounds;
COLORREF cl;
if(m_bGlass==FALSE)
{
HPALETTE pal;
GetAmbientPalette(pal);
GetAmbientBackColor(backcolor);
OleTranslateColor(backcolor,pal,&cl);
br=CreateSolidBrush(cl);
FillRect(di.hdcDraw,&rc,br);
DeleteObject(br);
}
HDC dc=::CreateCompatibleDC(di.hdcDraw);
old=(HBITMAP)::SelectObject(dc,m_hRedrawBitmap);
::BitBlt(di.hdcDraw,0,0,m_iGifWidth,m_iGifHeight,dc,0,0,SRCCOPY);
::SelectObject(dc,old);
m_bLockBitmap=FALSE;
DeleteDC(dc);
}
}
return S_OK;
}
STDMETHODIMP CGif89a::AboutBox()
{
DialogBox(_Module.m_hInst,MAKEINTRESOURCE(IDD_DIALOGBAR),0,DialogProc);
return S_OK;
}
STDMETHODIMP CGif89a::Play()
{
// TODO: Add your implementation code here
HANDLE hThread;
DWORD ThreadId;
if(m_hWnd==0)return S_OK;
if(m_pcGif==0)return S_OK;
if(m_EndRun==5)return S_OK;
m_pcGifTrack=m_pcGif;
m_iTotalReadByte=0;
m_EndRun=5;
hThread=CreateThread(NULL,0,(unsigned long(_stdcall*)(void*))ThreadFunc,this,0,&ThreadId);
CloseHandle(hThread);
return S_OK;
}
STDMETHODIMP CGif89a::Stop()
{
// TODO: Add your implementation code here
if(m_EndRun!=5)return S_OK;
m_EndRun=1;
while(m_EndRun!=2);
return S_OK;
}
STDMETHODIMP CGif89a::get_FileName(BSTR * pVal)
{
// TODO: Add your implementation code here
USES_CONVERSION;
*pVal=T2BSTR(filename);
return S_OK;
}
STDMETHODIMP CGif89a::put_FileName(BSTR newVal)
{
// TODO: Add your implementation code here
USES_CONVERSION;
strcpy(filename,OLE2T(newVal));
if(!Load(filename)){FireViewChange();return S_OK;}
if(m_bAutoStart)flag=0;
if(m_bAutoSize1)
{
SIZEL size5,size6;
size5.cx=m_iGifWidth;
size5.cy=m_iGifHeight;
AtlPixelToHiMetric(&size5,&size6);
m_rcPos.right=m_iGifWidth+m_rcPos.left;
m_rcPos.bottom=m_iGifHeight+m_rcPos.top;
SetExtent(DVASPECT_CONTENT,&size6);
if((m_spInPlaceSite!=NULL)&&m_bInPlaceActive)m_spInPlaceSite->OnPosRectChange(&m_rcPos);
else if(m_hWnd!=NULL)SetWindowPos(NULL,m_rcPos.left,m_rcPos.top,m_iGifWidth,m_iGifHeight,SWP_NOZORDER|SWP_NOMOVE|SWP_NOACTIVATE);
}
FireViewChange();
return S_OK;
}
STDMETHODIMP CGif89a::get_AutoStart(VARIANT_BOOL * pVal)
{
// TODO: Add your implementation code here
*pVal=m_bAutoStart;
return S_OK;
}
STDMETHODIMP CGif89a::get_AutoSize(VARIANT_BOOL * pVal)
{
// TODO: Add your implementation code here
*pVal=m_bAutoSize1;
return S_OK;
}
STDMETHODIMP CGif89a::put_AutoStart(VARIANT_BOOL newVal)
{
// TODO: Add your implementation code here
m_bAutoStart=newVal;
m_bRequiresSave=TRUE;
return S_OK;
}
STDMETHODIMP CGif89a::put_AutoSize(VARIANT_BOOL newVal)
{
// TODO: Add your implementation code here
if((newVal)&&(m_pcGif!=0))
{
SIZEL size5,size6;
size5.cx=m_iGifWidth;
size5.cy=m_iGifHeight;
m_rcPos.right=m_iGifWidth+m_rcPos.left;
m_rcPos.bottom=m_iGifHeight+m_rcPos.top;
AtlPixelToHiMetric(&size5,&size6);
SetExtent(DVASPECT_CONTENT,&size6);
if((m_spInPlaceSite!=NULL)&&m_bInPlaceActive)m_spInPlaceSite->OnPosRectChange(&m_rcPos);
else if(m_hWnd!=NULL)SetWindowPos(NULL,m_rcPos.left,m_rcPos.top,m_iGifWidth,m_iGifHeight,SWP_NOZORDER|SWP_NOMOVE|SWP_NOACTIVATE);
FireViewChange();
}
m_bRequiresSave=TRUE;
m_bAutoSize1=newVal;
return S_OK;
}
CGif89a::CGif89a()
{
m_bAutoStart=TRUE;
m_bAutoSize1=TRUE;
m_bEmbed=FALSE;
m_pcGlobalColorTable=0;
m_pcGif=0;
m_iGifSize=0;
m_iGlobalColorSize=0;
m_bTransparentIndex=FALSE;
m_iDelayTime=0;
m_EndRun=0;
m_dwSpeed=50;
m_hRedrawBitmap=0;
m_bLockBitmap=FALSE;
flag=0;
strcpy(filename,_T(""));
m_bWindowOnly=TRUE;
m_bNegotiatedWnd=FALSE;
m_bWndLess=FALSE;
m_bRunMode=1;
m_bResizeNatural=TRUE;
m_bRecomposeOnResize=TRUE;
m_bGlass=FALSE;
}
CGif89a::~CGif89a(void)
{
Stop();
if(m_hRedrawBitmap!=0)DeleteObject(m_hRedrawBitmap);
if(m_pcGlobalColorTable!=NULL)delete[] m_pcGlobalColorTable;
if(m_pcGif!=NULL)delete[] m_pcGif;
}
DWORD WINAPI ThreadFunc(CGif8
上一篇:
GIF89.CPP
下一篇:
恋沫