#ifndef _IMAGELIST_IMAGELIST_HPP_ #define _IMAGELIST_IMAGELIST_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_COMMCTRL_HPP_ #include #endif #ifndef _COMMON_RGBCOLOR_HPP_ #include #endif class GDIPoint; class Point; class PureBitmap; class PureDevice; class PureIcon; class String; class ImageInfo; class ImageList { public: enum ImageType{ImageMasked=0x0000,ImageUnMasked=0x0001}; enum DrawFlag{DrawNormal=ILD_NORMAL,DrawTransparent=ILD_TRANSPARENT,DrawMask=ILD_MASK, DrawImage=ILD_IMAGE,DrawBlend25=ILD_BLEND25,DrawBlend50=ILD_BLEND50, DrawOverlayMask=ILD_OVERLAYMASK}; ImageList(HINSTANCE hProcessInstance=(HINSTANCE)0); ImageList(HIMAGELIST hImageList,HINSTANCE hProcessInstance=(HINSTANCE)0,ImageType imageType=ImageUnMasked); ImageList(const ImageList &someImageList); ImageList(HINSTANCE hProcessInstance,const String &bitmapName,DWORD widthImage,RGBColor maskColor=RGBColor(),DWORD growthFactor=1); ImageList(HINSTANCE hProcessInstance,DWORD widthImage,DWORD heightImage,ImageType imageType=ImageUnMasked,DWORD initialCount=0,DWORD growthFactor=1); virtual ~ImageList(); ImageList &operator=(const ImageList &someImageList); ImageList &operator=(HIMAGELIST hImageList); WORD operator==(const ImageList &someImageList); operator HIMAGELIST(void); WORD insertImage(HBITMAP hBitmap); WORD insertImage(const PureBitmap &colorBitmap); WORD insertImage(const PureBitmap &colorBitmap,const PureBitmap &maskBitmap); WORD insertImage(const PureBitmap &colorBitmap,const RGBColor &maskColor); WORD insertImage(PureIcon &somePureIcon); WORD removeImage(DWORD itemIndex); WORD replaceImage(DWORD itemIndex,const PureBitmap &colorBitmap,const PureBitmap &maskBitmap); WORD replaceImage(DWORD itemIndex,PureIcon &somePureIcon); BOOL beginDrag(DWORD itemIndex,const GDIPoint &dragPoint)const; BOOL dragMove(const GDIPoint &dragPoint)const; BOOL dragEnter(HWND hwndLock,const GDIPoint &imagePoint)const; BOOL dragLeave(HWND hwndLock)const; BOOL dragShowNoLock(BOOL showFlag)const; BOOL setDragCursorImage(int itemIndex,const GDIPoint &hotSpot); void endDrag(void)const; DWORD size(void)const; RGBColor setBkColor(RGBColor bkGndColor=RGBColor((COLORREF)CLR_NONE)); RGBColor getBkColor(void)const; WORD drawImage(PureDevice &somePureDevice,const Point &xyPoint,DWORD itemIndex,DrawFlag drawFlag=DrawNormal); WORD setOverlayImage(DWORD itemIndex,DrawFlag drawFlag); BOOL imageInfo(int itemIndex,ImageInfo &imageInfo); WORD isOkay(void)const; private: ImageType imageType(void)const; WORD imageDimensions(Point &imageDimensions)const; HICON extractIcon(DWORD itemIndex)const; void destroyImageList(void); WORD createImageList(DWORD widthImage,DWORD heightImage,ImageType imageType=ImageUnMasked,DWORD initialCount=0,DWORD growthFactor=1); HIMAGELIST mhImageList; HINSTANCE mhProcessInstance; ImageType mImageType; }; inline ImageList::ImageList(HINSTANCE hProcessInstance) : mhImageList(0), mImageType(ImageUnMasked), mhProcessInstance(hProcessInstance) { } inline ImageList::ImageList(HIMAGELIST hImageList,HINSTANCE hProcessInstance,ImageType imageType) : mhImageList(hImageList), mhProcessInstance(hProcessInstance), mImageType(imageType) { } inline ImageList::ImageList(HINSTANCE hProcessInstance,DWORD widthImage,DWORD heightImage,ImageType imageType,DWORD initialCount,DWORD growthFactor) : mhImageList(0), mImageType(ImageUnMasked), mhProcessInstance(hProcessInstance) { createImageList(widthImage,heightImage,imageType,initialCount,growthFactor); } inline ImageList::ImageList(const ImageList &someImageList) { *this=someImageList; } inline ImageList::~ImageList() { destroyImageList(); } inline WORD ImageList::operator==(const ImageList &/*someImageList*/) { return FALSE; } inline WORD ImageList::createImageList(DWORD widthImage,DWORD heightImage,ImageType imageType,DWORD initialCount,DWORD growthFactor) { destroyImageList(); mhImageList=::ImageList_Create(widthImage,heightImage,imageType,initialCount,growthFactor); return isOkay(); } inline void ImageList::destroyImageList(void) { if(!isOkay())return; ::ImageList_Destroy(mhImageList); mhImageList=0; } inline ImageList::operator HIMAGELIST(void) { return mhImageList; } inline WORD ImageList::insertImage(HBITMAP hBitmap) { if(!isOkay())return FALSE; return ::ImageList_Add(mhImageList,hBitmap,0); } inline WORD ImageList::removeImage(DWORD itemIndex) { if(!isOkay())return FALSE; return ::ImageList_Remove(mhImageList,itemIndex); } inline DWORD ImageList::size(void)const { if(!isOkay())return FALSE; return ::ImageList_GetImageCount(mhImageList); } inline RGBColor ImageList::setBkColor(RGBColor bkGndColor) { if(!isOkay())return RGBColor((COLORREF)0); return RGBColor(::ImageList_SetBkColor(mhImageList,(COLORREF)bkGndColor)); } inline RGBColor ImageList::getBkColor(void)const { if(!isOkay())return RGBColor((COLORREF)0); return RGBColor(::ImageList_GetBkColor(mhImageList)); } inline WORD ImageList::setOverlayImage(DWORD itemIndex,DrawFlag drawFlag) { if(!isOkay())return FALSE; return ::ImageList_SetOverlayImage(mhImageList,itemIndex,(int)drawFlag); } inline ImageList::ImageType ImageList::imageType(void)const { return mImageType; } inline HICON ImageList::extractIcon(DWORD itemIndex)const { if(!isOkay())return FALSE; return ::ImageList_ExtractIcon(mhProcessInstance,mhImageList,itemIndex); } inline void ImageList::endDrag(void)const { if(!isOkay())return; ::ImageList_EndDrag(); } inline BOOL ImageList::dragShowNoLock(BOOL showFlag)const { if(!isOkay())return FALSE; return ::ImageList_DragShowNolock(showFlag); } inline WORD ImageList::isOkay(void)const { return (mhImageList?TRUE:FALSE); } #endif