#ifndef _COMMON_PUREPALETTE_HPP_ #define _COMMON_PUREPALETTE_HPP_ #include #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_PUREBITMAP_HPP_ #include #endif #ifndef _COMMON_PUREDEVICE_HPP_ #include #endif #ifndef _COMMON_RGBCOLOR_HPP_ #include #endif #ifndef _COMMON_ARRAY_HPP_ #include #endif #ifndef _COMMON_PALETTEENTRY_HPP_ #include #endif #ifndef _COMMON_EXCEPTION_HPP_ #include #endif #ifndef _COMMON_ARRAY_HPP_ #include #endif class BitmapInfo; class PurePalette { public: enum {MaxColors=256}; enum InitPal{InitSys,InitNone}; typedef int PaletteIndex; PurePalette(InitPal initPal=InitNone); PurePalette(HPALETTE hPalette); PurePalette(const String &strPathFileName); PurePalette(const PurePalette &somePurePalette); PurePalette(const BitmapInfo &someBitmapInfo); virtual ~PurePalette(); PurePalette &operator=(const PurePalette &somePurePalette); PurePalette &operator=(const BitmapInfo &someBitmapInfo); PurePalette &operator=(HPALETTE hPalette); PurePalette &operator=(const String &strPathFileName); PurePalette &operator=(const Array &paletteData); PaletteEntry &operator[](PaletteIndex paletteIndex); WORD operator==(const PurePalette &somePurePalette)const; WORD identityPalette(void); WORD systemPalette(bool useStandardColors=false); WORD isIdentityPalette(void)const; void cyclePalette(void); PaletteIndex paletteIndex(const RGBColor &someRGBColor)const; void getPaletteColors(Array &someRGBColors)const; void setPaletteColors(Array &someRGBColors,PaletteEntry::PaletteFlags paletteFlag=PaletteEntry::NullFlag); WORD setPaletteColor(short paletteIndex,RGBColor &someRGBColor,PaletteEntry::PaletteFlags paletteFlag=PaletteEntry::NullFlag); WORD getPaletteColor(short paletteIndex,RGBColor &someRGBColor)const; void clearPalette(void); void usePalette(const PureDevice &somePureDevice,short usage); WORD paletteEntry(PaletteIndex paletteIndex,RGBColor &someRGBColor)const; RGBColor paletteEntry(PaletteIndex paletteIndex)const; DWORD paletteEntries(void)const; void paletteEntries(DWORD palEntries); WORD isInUse(void)const; BOOL readPalette(const String &strPathFileName); BOOL writePalette(const String &strPathFileName); HPALETTE getPalette(void)const; private: enum {SystemStaticColors=20}; WORD createPalette(void); void setPaletteColors(void)const; void destroyPalette(void); HPALETTE mhPalette; HPALETTE mhOldPalette; Array mPaletteData; WORD mIsInUse; }; inline PurePalette::PurePalette(InitPal initPal) : mhPalette(0), mhOldPalette(0), mIsInUse(FALSE) { mPaletteData.size(MaxColors); if(InitSys==initPal)systemPalette(); else createPalette(); return; } inline PurePalette::~PurePalette() { destroyPalette(); return; } inline DWORD PurePalette::paletteEntries(void)const { return mPaletteData.size(); } inline void PurePalette::paletteEntries(DWORD palEntries) { mPaletteData.size(palEntries); createPalette(); } inline void PurePalette::setPaletteColors(void)const { ::SetPaletteEntries(mhPalette,0,paletteEntries(),(PALETTEENTRY FAR*)&((PurePalette&)*this).mPaletteData[0]); } inline WORD PurePalette::isInUse(void)const { return mIsInUse; } inline PurePalette::PaletteIndex PurePalette::paletteIndex(const RGBColor &someRGBColor)const { return ::GetNearestPaletteIndex(mhPalette,(COLORREF)someRGBColor); } inline PaletteEntry &PurePalette::operator[](PaletteIndex paletteIndex) { if(paletteIndex>=paletteEntries())throw(BoundaryError()); return mPaletteData[paletteIndex]; } inline HPALETTE PurePalette::getPalette(void)const { return mhPalette; } #endif