You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mitlib.pub/MITLIB/Utility/AVICtrl.h

144 lines
4.2 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Copyright (C) 1999 by Jens Schacherl (16.09.1999)
// All rights reserved.
//
// This is free source code and you are allowed to use it even in your
// billion-dollar-application as long as you leave this copyright notice
// unchanged.
//
// No warranty of any kind, expressed or implied, is included with this
// software. Any responsibility for damages, loss of money or hair etc. rests
// entirely with the prospective user.
// Have fun but use it at your own risk.
//
// Mail me your thoughts to: schacherl@spiess.com (preferred) or
// jschacherl@csi.com
//
/////////////////////////////////////////////////////////////////////////////
// AVICtrl.h : header file
//
#if !defined(AFX_AVICTRL_H__5EC9E0F0_52F0_11D3_AE13_000000000000__INCLUDED_)
#define AFX_AVICTRL_H__5EC9E0F0_52F0_11D3_AE13_000000000000__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// load flags
#define AVC_HALFSPEED 0x0000001 // plays video with half speed
#define AVC_DOUBLESPEED 0x0000002 // plays video with double speed
#define AVC_CENTERAVI 0x0000004 // centers video inside the window
#define AVC_STRETCHAVI 0x0000008 // stretches video to fit inside of the window
#define AVC_CENTERRECT 0x0000010 // resizes window, center point stays the same
#define AVC_AUTOPLAY 0x0000020 // starts playing automatically after Load()
#define AVC_MAPWINDOWCOLOR 0x0000040 // background is COLOR_WINDOW instead of transparent (like CAnimateCtrl's AVS_"TRANSPARENT")
#define AVC_FIRSTPIXTRANSPRNT 0x0000080 // ignore clrTransparent parameter and use color of firstframes first pixel for transparency
// colors
#define AVC_BLACK RGB(0, 0, 0)
#define AVC_WHITE RGB(255, 255, 255)
#define AVC_LTGREEN RGB(0, 255, 0)
// timer
#define ID_TIMER 111
// identifier for avi resources
#define RT_AVIVIDEO _T("AVI")
#include "vfw.h"
#ifdef BUILD_UTILITYDLL
#define UTILITYDLL __declspec(dllexport)
#else
#define UTILITYDLL __declspec(dllimport)
#endif
/////////////////////////////////////////////////////////////////////////////
// CAVICtrl window
class UTILITYDLL CAVICtrl : public CWnd
{
// Construction
public:
CAVICtrl();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAVICtrl)
//}}AFX_VIRTUAL
// Implementation
public:
HRESULT Load(UINT nIDResource, DWORD dwFlags = 0L, COLORREF clrTransparent = AVC_LTGREEN);
HRESULT Load(LPCTSTR lpszFile, DWORD dwFlags = 0L, COLORREF clrTransparent = AVC_LTGREEN);
void ReinitBackground() { m_bInitBkg = TRUE; };
BOOL Play(BOOL bOnce = FALSE);
BOOL Stop(BOOL bResetToFirst = FALSE);
void Seek(UINT nTo);
BOOL IsPlaying() { return m_bPlaying; };
virtual ~CAVICtrl();
// Generated message map functions
protected:
CString GetTempAVIFileName();
COLORREF GetFirstPixelColor();
void InitBackground();
void DrawTransparent(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, CDC* pDstDC);
void DrawCurrentFrame(CDC* pDC);
static void CALLBACK PlayTimer(HWND hWnd, UINT uMsg, UINT idEvent, DWORD dwTime);
//{{AFX_MSG(CAVICtrl)
afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
afx_msg void OnPaint();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnSysColorChange();
afx_msg void OnDestroy();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
void CtrlDestroy();
void CtrlInit();
DWORD m_dwFlags;
CString m_csTempFile;
int m_nRealHeight;
int m_nRealWidth;
int m_nAVIOffsetY;
int m_nAVIOffsetX;
BOOL m_bOnce;
BOOL m_bInitBkg;
CBitmap* m_pbmpBkgOld;
CBitmap m_bmpBkg;
CDC m_dcBkg;
COLORREF m_clrTransp;
HDRAWDIB m_hDrawDib;
UINT m_nTimerTime;
LONG m_lFrames;
UINT m_nCurrentFrame;
PGETFRAME m_pGF;
BOOL m_bPlaying;
PAVISTREAM m_pAS;
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_AVICTRL_H__5EC9E0F0_52F0_11D3_AE13_000000000000__INCLUDED_)