/****************************************************************************/ /* */ /* Copyright (C) 1987-1996 Microsoft Corp. */ /* All Rights Reserved */ /* */ /****************************************************************************/ /****************************** Module Header ******************************* * Module Name: imagedit.h * * Main header file for the Image Editor. * * History: * ****************************************************************************/ #define WIN31 #define _WINDOWS #define NOMINMAX #include #ifdef DBG #define STATICFN #else #define STATICFN static #endif #define WINDOWPROC LONG APIENTRY #define DIALOGPROC BOOL APIENTRY /* * Typedef for a drawing proc (a tool). */ typedef VOID (*DRAWPROC)(HWND, UINT, POINT); #define CCHTEXTMAX 256 /* * Maximum size of a file name plus path specification. */ #define CCHMAXPATH 260 /* * Defines for the different tools. These are indexes into * the gaTools table. */ #define TOOL_FIRST 0 #define TOOL_PENCIL 0 #define TOOL_BRUSH 1 #define TOOL_SELECT 2 #define TOOL_LINE 3 #define TOOL_RECT 4 #define TOOL_SOLIDRECT 5 #define TOOL_CIRCLE 6 #define TOOL_SOLIDCIRCLE 7 #define TOOL_FLOODFILL 8 #define TOOL_HOTSPOT 9 #define CTOOLS 10 /* Number of tools. */ /* * Macros to simplify working with menus. */ #define MyEnableMenuItem(hMenu, wIDEnableItem, fEnable) \ EnableMenuItem((hMenu),(wIDEnableItem),(fEnable)?MF_ENABLED:MF_GRAYED) #define MyCheckMenuItem(hMenu, wIDCheckItem, fCheck) \ CheckMenuItem((hMenu),(wIDCheckItem),(fCheck)?MF_CHECKED:MF_UNCHECKED) /* * Defines for strings. */ #define IDS_NULL 0 #define IDS_VERSION 1 #define IDS_VERSIONMINOR 2 #define IDS_OUTOFMEMORY 3 #define IDS_MEMERROR 4 #define IDS_BADBMPFILE 5 #define IDS_BADICOCURFILE 6 #define IDS_BADPALFILE 7 #define IDS_CANTOPEN 8 #define IDS_READERROR 9 #define IDS_WRITEERROR 10 #define IDS_CANTCREATE 11 #define IDS_NOCLIPBOARDFORMAT 12 #define IDS_NOCLIPBOARD 13 #define IDS_CANTEDITIMAGE 14 #define IDS_SAVEFILE 15 #define IDS_ENTERANUMBER 16 #define IDS_BADDEVICESIZE 17 #define IDS_BADDEVICECOLORS 18 #define IDS_NOTSUPPORT 19 #define IDS_NOIMAGES 20 #define IDS_BADBMPSIZE 21 #define IDS_APPNAME 22 #define IDS_PGMTITLE 23 #define IDS_UNTITLED 24 #define IDS_DOTBMP 25 #define IDS_HELPFILE 26 #define IDS_IMAGEDITINI 27 #define IDS_ICONIMAGELABEL 28 #define IDS_BITMAPIMAGELABEL 29 #define IDS_CURSORIMAGELABEL 30 #define IDS_ICONDEVNAMEEGAVGA 31 #define IDS_ICONDEVNAMEMONO 32 #define IDS_ICONDEVNAMECGA 33 #define IDS_CURDEVNAMEVGAMONO 34 #define IDS_CURDEVNAMEVGACOLOR 35 #define IDS_ICONINISECTION 36 #define IDS_CURSORINISECTION 37 #define IDS_BMPFILTER 38 #define IDS_BMPFILTEREXT 39 #define IDS_ICOFILTER 40 #define IDS_ICOFILTEREXT 41 #define IDS_CURFILTER 42 #define IDS_CURFILTEREXT 43 #define IDS_PALFILTER 44 #define IDS_PALFILTEREXT 45 #define IDS_ALLFILTER 46 #define IDS_ALLFILTEREXT 47 #define IDS_DEFEXTBMP 48 #define IDS_DEFEXTICO 49 #define IDS_DEFEXTCUR 50 #define IDS_DEFEXTPAL 51 #define IDS_UNKNOWNIMAGEFORMAT 52 /* * The total number of strings. This MUST be updated if strings are * added or removed. */ #define CSTRINGS 53 /* * Defines for messages. These are indexes into the gamdMessage table. */ #define MSG_OUTOFMEMORY 0 #define MSG_MEMERROR 1 #define MSG_BADBMPFILE 2 #define MSG_BADICOCURFILE 3 #define MSG_BADPALFILE 4 #define MSG_CANTOPEN 5 #define MSG_READERROR 6 #define MSG_WRITEERROR 7 #define MSG_CANTCREATE 8 #define MSG_NOCLIPBOARDFORMAT 9 #define MSG_NOCLIPBOARD 10 #define MSG_CANTEDITIMAGE 11 #define MSG_SAVEFILE 12 #define MSG_ENTERANUMBER 13 #define MSG_BADDEVICESIZE 14 #define MSG_BADDEVICECOLORS 15 #define MSG_NOTSUPPORT 16 #define MSG_NOIMAGES 17 #define MSG_BADBMPSIZE 18 /* * Defines for the different file types. */ #define FT_BITMAP 0 #define FT_ICON 1 #define FT_CURSOR 2 #define FT_PALETTE 3 /* * Macro to properly cast a FAR pointer to a near pointer. * Casts a FAR pointer to void, then to an unsigned long integral * value, then truncate it to a short integral value, then cast * to a near pointer. */ #ifdef WIN32 #define FAR2NEAR(lpstr) (lpstr) #else #define FAR2NEAR(lpstr) ((PSTR)(WORD)(DWORD)(LPVOID)(lpstr)) #endif /* * RGB color values. */ #define RGB_BLACK RGB( 0, 0, 0) #define RGB_WHITE RGB(255, 255, 255) #define RGB_LIGHTGRAY RGB(192, 192, 192) #define RGB_DARKGRAY RGB(128, 128, 128) /* * Maximum rows and columns in the color box. This includes room for * screen/inverse and a separating blank column. */ #define COLORCOLS 16 #define COLORROWS 2 /* * Maximum colors in the palette (not including screen/inverse). */ #define COLORSMAX 28 /* * Defines for the different color modes that the left and right * mouse buttons can have. */ #define MODE_COLOR 0 // A standard color. #define MODE_SCREEN 1 // The screen color. #define MODE_INVERSE 2 // The inverse screen color. /* * Margin (in pixels) within each of the palette and toolbox windows. */ #define PALETTEMARGIN 2 /* raster op combination modes */ #define ROP_DSna 0x00220326L #define ROP_DSPao 0x00EA02E9L #define DEFAULTBITMAPWIDTH 32 // Default bitmap width. #define DEFAULTBITMAPHEIGHT 32 // Default bitmap height. #define DEFAULTBITMAPCOLORS 16 // Default bitmap colors. #define MAXIMAGEDIM 256 // Max image width/height (dimension). #define MAXIMAGES 64 // Maximum images in an ico/cur file. #define CCHDESCRIPTOR 80 /* length of image descriptor string */ #define CCHDEVICENAMEMAX 20 /* maximum length of a device name */ /* * Maximum sizes of the app window when running ImagEdit for the first time. * This makes it so that the editor does not default to a huge size when * run on a super-vga resolution monitor. */ #define MAXDEFAULTAPPCX 640 #define MAXDEFAULTAPPCY 480 /*************************************************************************/ /* 3.0 icon/cursor header */ typedef struct { WORD iReserved; /* always 0 */ WORD iResourceType; WORD iResourceCount; /* number of resources in file */ } ICOCURSORHDR; /* 3.0 icon/cursor descriptor */ typedef struct { BYTE iWidth; /* width of image (icons only ) */ BYTE iHeight; /* height of image(icons only) */ BYTE iColorCount; /* number of colors in image */ BYTE iUnused; /* */ WORD iHotspotX; /* hotspot x coordinate (CURSORS only) */ WORD iHotspotY; /* hotspot y coordinate (CURSORS only) */ DWORD DIBSize; /* size of DIB for this image */ DWORD DIBOffset; /* offset to DIB for this image */ } ICOCURSORDESC, *PICOCURSORDESC; typedef struct DeviceNode { struct DeviceNode *pDeviceNext; // Pointer to next device node. INT iType; // Type of image (FT_*). INT nColors; // Number of colors. INT cx; // Width of image. INT cy; // Height of image. CHAR szName[CCHDEVICENAMEMAX]; // Device name. CHAR szDesc[CCHDESCRIPTOR]; // Full description string. } DEVICE; typedef DEVICE *PDEVICE; /* * Structure that describes a link in the image list. */ typedef struct ImageNode { struct ImageNode *pImageNext; // Pointer to next image. PDEVICE pDevice; // Pointer to device structure. INT cx; // Image width. INT cy; // Image height. INT iHotspotX; // Hotspot x coordinate (cursors only). INT iHotspotY; // Hotspot y coordinate (cursors only). INT nColors; // Number of colors. DWORD DIBSize; // Size of DIB for this image. HANDLE DIBhandle; // Handle to DIB bits. LPSTR DIBPtr; // Pointer to DIB bits. } IMAGEINFO, *PIMAGEINFO; /* * Defines an entry in the gamdMessages table of error and warning messages. */ typedef struct { UINT ids; /* String id for the message text. */ UINT fMessageBox; /* Flags for the MessageBox function. */ } MESSAGEDATA; /* * This structure defines each tool used in the editor. */ typedef struct { DRAWPROC pfnDrawProc; /* Drawing procedure for this tool type. */ HCURSOR hcur; /* Handle to the cursor for this tool. */ INT idbmToolBtnUp; /* ID of "up" bmp res. for the Toolbox button. */ HBITMAP hbmToolBtnUp; /* hbm of "up" bitmap for the Toolbox button. */ INT idbmToolBtnDown; /* ID of "down" bmp res. for the Toolbox button.*/ HBITMAP hbmToolBtnDown; /* hbm of "down" bitmap for the Toolbox button. */ UINT fDrawOnDown:1; /* TRUE if tool draws on down click. */ UINT fDrawOnUp:1; /* TRUE if tool draws on up click. */ } TOOLS; /* * One single entry for an environment setting saved in the * profile file. Used by ReadEnv and WriteEnv. */ typedef struct _INIENTRY { PSTR pstrKeyName; PINT pnVar; INT nDefault; INT nSave; } INIENTRY; /* * Structure that maps a subject (like a menu id or a dialog id) with * a help context to pass in to WinHelp. */ typedef struct { INT idSubject; // Subject, usually a menu or dialog id. INT HelpContext; // The matching help context. } HELPMAP; typedef HELPMAP *PHELPMAP; #include "iefuncs.h" #include "globals.h" #ifdef strcmpi #undef strcmpi #endif #define strcmpi lstrcmpi #define strtok My_mbstok #define strncat My_mbsncat unsigned char * _CRTAPI1 My_mbstok(unsigned char *, unsigned char *); unsigned char * _CRTAPI1 My_mbsncat( unsigned char *, const unsigned char *, size_t);