// CBitmap.h // // This is a part of the Microsoft Foundation Classes C++ library. // Copyright (c) 1992 - 1999 Microsoft Corporation. All Rights Reserved. // All rights reserved. // // This source code is only intended as a supplement to the // Microsoft Foundation Classes Reference and related // electronic documentation provided with the library. // See these sources for detailed information regarding the // Microsoft Foundation Classes product. #ifndef _INC_CBITMAP #define _INC_CBITMAP #include "MSMFCnt.h" // for definitions of the blit types /* Handle to a DIB */ DECLARE_HANDLE(HDIB); /* DIB constants */ #define PALVERSION 0x300 /* DIB Macros*/ #define IS_WIN30_DIB(lpbi) ((*(LPDWORD)(lpbi)) == sizeof(BITMAPINFOHEADER)) #define RECTWIDTH(lpRect) ((lpRect)->right - (lpRect)->left) #define RECTHEIGHT(lpRect) ((lpRect)->bottom - (lpRect)->top) // WIDTHBYTES performs DWORD-aligning of DIB scanlines. The "bits" // parameter is the bit count for the scanline (biWidth * biBitCount), // and this macro returns the number of DWORD-aligned bytes needed // to hold those bits. #define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4) // Some helper functions inline DWORD WINAPI DIBSize(LPSTR lpDIB); inline DWORD WINAPI DIBWidth (LPSTR lpDIB); inline DWORD WINAPI DIBHeight (LPSTR lpDIB); inline BYTE RGBtoL(BYTE R, BYTE G, BYTE B); HGLOBAL WINAPI CopyHandle (HGLOBAL h); class CBitmap { public: /* Function prototypes */ CBitmap(){ Init();} virtual ~CBitmap() {CleanUp();} void Init(); void CleanUp(); HPALETTE GetPal() { return m_hPal;} RECT GetDIBRect() {return m_rc;} BOOL CreateMemDC(HDC, LPRECT); BOOL DeleteMemDC(); BOOL CreateTransDC(HDC, LPRECT); BOOL DeleteTransDC(); BOOL BlitMemDC(HDC hDc, LPRECT lpDCRect, LPRECT lpDIBRect); HRESULT WINAPI SetImage(TCHAR* strFilename, HINSTANCE hRes); BOOL WINAPI PaintDIB (HDC, LPRECT, LPRECT, LPRECT, bool complex=false); BOOL WINAPI PaintTransparentDIB(HDC, LPRECT, LPRECT, TransparentBlitType, bool complex=false, HWND hWnd=NULL); BOOL WINAPI CreateDIBPalette(); BOOL WINAPI ConvertColorTableGray(); BOOL WINAPI ConvertDIBGray(TransparentBlitType blitType); LPSTR WINAPI FindDIBBits (LPSTR lpbi); WORD WINAPI PaletteSize (LPSTR lpbi); WORD WINAPI DIBNumColors (LPSTR lpbi); HGLOBAL WINAPI CopyHandle (HGLOBAL h); bool IsEmpty(){return(NULL == m_hDIB);}; bool IsPaletteLoaded(){return(m_fLoadPalette);} void LoadPalette(bool fLoadPalette){m_fLoadPalette = fLoadPalette;}; HDIB WINAPI ReadDIBFile(LPCTSTR pszFileName, HINSTANCE hRes); HRESULT PutImage(BSTR strFilename, HINSTANCE hRes = NULL, IUnknown* pUnk = NULL, bool fGrayOut=false, TransparentBlitType=DISABLE); HRESULT XORRegion(HRGN *phRgn, HRGN hRgn, const RECT &rc) const; HRESULT GetRegion(HDC hDC, HRGN *phRgn, RECT* pRect, COLORREF, bool fInvert=FALSE) const; protected: HDIB m_hDIB; HPALETTE m_hPal; RECT m_rc; HDC m_hMemDC; HBITMAP m_hMemBMP; LONG m_iMemDCWidth; LONG m_iMemDCHeight; HDC m_hTransDC; HBITMAP m_hTransBMP; LONG m_iTransDCWidth; LONG m_iTransDCHeight; HRGN m_hRgn; bool m_fLoadPalette; }; #endif //!_INC_CBITMAP