// Icons.h: interface for the CIcons class. ////////////////////////////////////////////////////////////////////// // //用途:IconSnap所需调用的类 //功能:图标基础操作类 //作者:徐景周 //日期:2001年9月 // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_ICONS_H__22E22BB7_2BD4_42EB_B682_EAFB6A753BAC__INCLUDED_) #define AFX_ICONS_H__22E22BB7_2BD4_42EB_B682_EAFB6A753BAC__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 /****************************************************************************/ // These first two structs represent how the icon information is stored // when it is bound into a EXE or DLL file. Structure members are WORD // aligned and the last member of the structure is the ID instead of // the imageoffset. #pragma pack( push ) #pragma pack( 2 ) typedef struct { BYTE bWidth; // Width of the image BYTE bHeight; // Height of the image (times 2) BYTE bColorCount; // Number of colors in image (0 if >=8bpp) BYTE bReserved; // Reserved WORD wPlanes; // Color Planes WORD wBitCount; // Bits per pixel DWORD dwBytesInRes; // how many bytes in this resource? WORD nID; // the ID } MEMICONDIRENTRY, *LPMEMICONDIRENTRY; typedef struct { WORD idReserved; // Reserved WORD idType; // resource type (1 for icons) WORD idCount; // how many images? MEMICONDIRENTRY idEntries[1]; // the entries for each image } MEMICONDIR, *LPMEMICONDIR; #pragma pack( pop ) // These next two structs represent how the icon information is stored // in an ICO file. typedef struct { BYTE bWidth; // Width of the image BYTE bHeight; // Height of the image (times 2) BYTE bColorCount; // Number of colors in image (0 if >=8bpp) BYTE bReserved; // Reserved WORD wPlanes; // Color Planes WORD wBitCount; // Bits per pixel DWORD dwBytesInRes; // how many bytes in this resource? DWORD dwImageOffset; // where in the file is this image } ICONDIRENTRY, *LPICONDIRENTRY; typedef struct { WORD idReserved; // Reserved WORD idType; // resource type (1 for icons) WORD idCount; // how many images? ICONDIRENTRY idEntries[1]; // the entries for each image } ICONDIR, *LPICONDIR; // The following two structs are for the use of this program in // manipulating icons. They are more closely tied to the operation // of this program than the structures listed above. One of the // main differences is that they provide a pointer to the DIB // information of the masks. typedef struct { UINT Width, Height, Colors; // Width, Height and bpp LPBYTE lpBits; // ptr to DIB bits DWORD dwNumBytes; // how many bytes? LPBITMAPINFO lpbi; // ptr to header LPBYTE lpXOR; // ptr to XOR image bits LPBYTE lpAND; // ptr to AND image bits } ICONIMAGE, *LPICONIMAGE; typedef struct { BOOL bHasChanged; // Has image changed? TCHAR szOriginalICOFileName[MAX_PATH]; // Original name TCHAR szOriginalDLLFileName[MAX_PATH]; // Original name UINT nNumImages; // How many images? ICONIMAGE IconImages[1]; // Image entries } ICONRESOURCE, *LPICONRESOURCE; /****************************************************************************/ /****************************************************************************/ // Resource Position info - size and offset of a resource in a file typedef struct { DWORD dwBytes; DWORD dwOffset; } RESOURCEPOSINFO, *LPRESOURCEPOSINFO; // EXE/DLL icon information - filename, instance handle and ID typedef struct { LPCTSTR szFileName; HINSTANCE hInstance; LPTSTR lpID; } EXEDLLICONINFO, *LPEXEDLLICONINFO; /****************************************************************************/ #define MAX_ICON_WIDTH 128 // Max width #define MIN_ICON_WIDTH 16 // Min width #define MAX_ICON_HEIGHT MAX_ICON_WIDTH // Max height #define MIN_ICON_HEIGHT MIN_ICON_WIDTH // Min height class CIcons { public: CIcons(); virtual ~CIcons(); public: LPICONRESOURCE ReadIconFromICOFile( LPCTSTR szFileName ); BOOL WriteIconToICOFile( LPICONRESOURCE lpIR, LPCTSTR szFileName ); HICON MakeIconFromResource( LPICONIMAGE lpIcon ); HICON GetIconFromInstance( HINSTANCE hInstance, LPTSTR nIndex ); LPICONRESOURCE ReadIconFromEXEFile( LPCTSTR szFileName, LPTSTR lpID); BOOL IconImageToClipBoard( LPICONIMAGE lpii ); BOOL IconImageFromClipBoard( LPICONIMAGE lpii, BOOL bStretchToFit ); BOOL IconImageFromBMPFile( LPCTSTR szFileName, LPICONIMAGE lpii, BOOL bStretchToFit ); BOOL IconImageToBMPFile( LPCTSTR szFileName, LPICONIMAGE lpii ); private: UINT ReadICOHeader( HANDLE hFile ); BOOL AdjustIconImagePointers( LPICONIMAGE lpImage ); BOOL WriteICOHeader( HANDLE hFile, UINT nNumEntries ); DWORD CalculateImageOffset( LPICONRESOURCE lpIR, UINT nIndex ); BOOL DIBToIconImage( LPICONIMAGE lpii, LPBYTE lpDIB, BOOL bStretch ); }; #endif // !defined(AFX_ICONS_H__22E22BB7_2BD4_42EB_B682_EAFB6A753BAC__INCLUDED_)