Files
Work/imagelst/IMAGELST.HPP
2024-08-07 09:16:27 -04:00

206 lines
5.6 KiB
C++

#ifndef _IMAGELIST_IMAGELIST_HPP_
#define _IMAGELIST_IMAGELIST_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_COMMCTRL_HPP_
#include <common/commctrl.hpp>
#endif
#ifndef _COMMON_RGBCOLOR_HPP_
#include <common/rgbcolor.hpp>
#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