/////////////////////////////////////////////////////////////////////////////
//
//	Copyright (c) 1996-1997 Microsoft Corporation
//
//	Module Name:
//		Bitmap.h
//
//	Abstract:
//		Definition of the CMyBitmap class.
//
//	Implementation File:
//		Bitmap.cpp
//
//	Author:
//		David Potter (davidp)	June 12, 1996
//
//	Revision History:
//
/////////////////////////////////////////////////////////////////////////////

#ifndef _BITMAP_H_
#define _BITMAP_H_

/////////////////////////////////////////////////////////////////////////////
// Forward Class Declarations
/////////////////////////////////////////////////////////////////////////////

class CMyBitmap;

/////////////////////////////////////////////////////////////////////////////
// Type Definitions
/////////////////////////////////////////////////////////////////////////////

#define nMaxSavedSystemPaletteEntries		256

/////////////////////////////////////////////////////////////////////////////
// CMyBitmap
/////////////////////////////////////////////////////////////////////////////

class CMyBitmap
{
public:
//	static	int			s_rgnColorWindowNormal[16];
//	static	int			s_rgnColorWindowHighlighted[16];
//	static	int			s_rgnColorButtonNormal[16];
//	static	int			s_rgnColorButtonHighlighted[16];

	static PALETTEENTRY	s_rgpeSavedSystemPalette[];
	int					m_nSavedSystemPalette;

private:
	HINSTANCE		m_hinst;

	BITMAPINFO *	m_pbiNormal;
	BITMAPINFO *	m_pbiHighlighted;
	BYTE *			m_pbBitmap;

	int				m_dx;
	int				m_dy;

	int				m_nColors;
	CB				m_cbColorTable;
	CB				m_cbBitmapInfo;
	CB				m_cbImageSize;
	HPALETTE		m_hPalette;
	BOOL			m_bCustomPalette;

protected:
	HINSTANCE		Hinst(void) const			{ return m_hinst; }
	BITMAPINFO *	PbiNormal(void) const		{ return m_pbiNormal;}
	BITMAPINFO *	PbiHighlighted(void) const	{ return m_pbiHighlighted; }
	BYTE *			PbBitmap(void) const		{ return m_pbBitmap; }

	void			LoadColors(int * pnColor, BITMAPINFO * pbi);

	int				NColorsFromBitCount(int nBitCount) const;

	CB				CbColorTable(void) const	{ return m_cbColorTable; }
	CB				CbBitmapInfo(void) const	{ return m_cbBitmapInfo; }
	CB				CbImageSize(void) const		{ return m_cbImageSize; }
	HPALETTE		HPalette(void) const		{ return m_hPalette; }
	BOOL			BCustomPalette(void) const	{ return m_bCustomPalette; }

	void			LoadBitmapResource(ID idBitmap, HINSTANCE hinst, LANGID langid);

	void			SaveSystemPalette(void);
	void			CreatePalette(void);
	void			CreatePALColorMapping(void);

public:
	CMyBitmap(void);
	virtual ~CMyBitmap(void);

	int				Dx(void) const				{ return m_dx; }
	int				Dy(void) const				{ return m_dy; }

	int				NColors(void) const			{ return m_nColors; }

	void			SetHinst(HINSTANCE hinst)	{ ASSERT(hinst != NULL); m_hinst = hinst; }
	void			SetCustomPalette(BOOL bCustomPalette)		{ m_bCustomPalette = bCustomPalette; }

	void			Load(ID idBitmap);

	virtual	void	Paint(HDC hdc, RECT * prc, BOOL bSelected);

	void			LoadColors(int * pnColorNormal, int * pnColorHighlighted);
	void			LoadColors(int * pnColorNormal);

	RGBQUAD			RgbQuadColorNormal(int nColor) const
	{
		ASSERT(nColor >= 0 && nColor < NColors());
		return PbiNormal()->bmiColors[nColor];
	}
	void			SetRgbQuadColorNormal(RGBQUAD rgbQuad, int nColor)
	{
		ASSERT(nColor >= 0 && nColor < NColors());
		PbiNormal()->bmiColors[nColor] = rgbQuad;
	}

};  //*** class CMyBitmap

/////////////////////////////////////////////////////////////////////////////

#endif // _BITMAP_H_