/****************************************************************************/
/* */
/* 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 <windows.h>
#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);