|
|
#ifndef __IMGSUPRT_H__
#define __IMGSUPRT_H__
#define MAX_PALETTE_COLORS 256
#define WM_CANCEL WM_USER + 0
// Brush Shapes
#define roundBrush 0
#define squareBrush 1
#define slantedLeftBrush 2
#define slantedRightBrush 3
// Combine Modes
#define combineColor 0
#define combineMatte 1
#define combineReplace 2
// Non-standard Raster Ops
#define DSx 0x00660046L
#define DSa 0x008800C6L
#define DSna 0x00220326L
#define DSPao 0x00ea02e9L
#define DSo 0x00ee0086L
#define DSno 0x00bb0226L
#define DSPDxax 0x00e20746L
#define SPxn 0x00c3006aL
// Indices of the screen and inverse colors in color table.
#define IDScreen -1
#define IDInvScreen -2
// NOTE: These structures mirror the LOGPALETTE structure in WINDOWS.H
struct LOGPALETTE16 { WORD palVersion; WORD palNumEntries; PALETTEENTRY palPalEntry[16]; };
struct LOGPALETTE256 { WORD palVersion; WORD palNumEntries; PALETTEENTRY palPalEntry[MAX_PALETTE_COLORS]; };
// Note: this bogus structure is not my fault! It's stolen from
// the old Windows SDK ImagEdit program...
#pragma pack(1)
struct COLORFILEHEADER { char tag; // this is a 'C'
short colors; char reserved[47]; // fill with 0
// DWORD rgrgb [colors];
};
#pragma pack()
/*************************************************************************/
//extern int FileTypeFromExtension( const TCHAR FAR* lpcExt );
void InitCustomData(); // see customiz.cpp
void CustomExit();
class CImgWnd;
// IMGSUPRT.CPP
extern IMG* CreateImg (int cxWidth, int cyHeight, int cPlanes, int cBitCount, int cXPelsPerMeter, int cYPelsPerMeter, BOOL bPalette = TRUE ); extern void SelectImg (IMG* pImg); extern BOOL ClearImg (IMG* pImg); extern void FreeImg (IMG* pImg); extern void DirtyImg (IMG* pImg); extern void AddImgWnd (IMG* pImg, CImgWnd* pImgWnd); extern BOOL UpdateCurIcoImg (IMG* pImg); extern BOOL ChangeICBackground (IMG* pImg, COLORREF rgbNewScr); extern BOOL SetImgSize (IMG* pImg, CSize newSize, BOOL bStretch); extern void GetImgSize (IMG* pImg, CSize& size); extern BOOL ReplaceImgPalette (IMG* pImg, LPLOGPALETTE lpLogPal); extern int AddNewColor (IMG* pImg, COLORREF crNew );
// IMGED.CPP
extern void Draw3dRect (HDC hDC, RECT* prc);
// DRAW.CPP
extern void InvalImgRect (IMG* pImg, CRect* prc); extern void CommitImgRect (IMG* pImg, CRect* prc); extern void FixRect (RECT* prc); extern void StandardiseCoords (CPoint* s, CPoint* e); extern void DrawBrush (IMG* pImg, CPoint pt, BOOL bDraw); extern void HideBrush (); extern void SetCombineMode (int wNewCombineMode); extern BOOL SetupRubber (IMG* pImg); extern void PolyTo (CDC* pDC, CPoint fromPt, CPoint toPt, CSize size); extern BOOL GetTanPt (CSize size, CPoint delta, CRect& tan);
extern void SetDrawColor (COLORREF cr); extern void SetEraseColor (COLORREF cr); extern void SetTransColor (COLORREF cr); extern void SetDrawColor (int iColor); extern void SetEraseColor (int iColor); extern void SetTransColor (int iColor); extern void InvalColorWnd (); extern BOOL SetUndo (IMG* pImg); extern void SetLeftColor (int nColor); extern void SetRightColor (int nColor); extern void CommitSelection (BOOL bSetUndo); extern void PickupSelection ();
extern BOOL EnsureUndoSize (IMG* pimg);
extern void CleanupImages (); extern void CleanupImgRubber(); extern void CleanupImgUndo ();
extern IMG* pImgCur;
#define TRANS_COLOR_NONE 0x87654321 // undefined
extern BOOL fDraggingBrush; extern BOOL g_bCustomBrush; extern BOOL g_bDriverCanStretch; extern BOOL g_bUseTrans;
extern int theLeft; extern int theRight; extern int theTrans; extern COLORREF crLeft; extern COLORREF crRight; extern COLORREF crTrans; extern int wCombineMode;
struct DINFO { TCHAR* m_szDesc; UINT m_nColors; SIZE m_size; };
extern COLORREF std2Colors[];
extern CPalette* GetStd256Palette(); extern CPalette* GetStd16Palette(); extern CPalette* GetStd2Palette(); extern CPalette* PaletteFromDS(HDC hdc);
#define IS_WIN30_DIB(lpbi) ((*(LPDWORD)(lpbi)) >= sizeof (BITMAPINFOHEADER))
extern WORD DIBNumColors ( LPSTR lpbi, BOOL bJustUsed=TRUE ); extern DWORD DIBWidth ( LPSTR lpDIB ); extern DWORD DIBHeight ( LPSTR lpDIB ); extern CPalette* CreateDIBPalette ( LPSTR lpbi ); extern HBITMAP DIBToBitmap ( LPSTR lpDIBHdr, CPalette* pPal, HDC hdc = NULL ); extern HBITMAP DIBToDS ( LPSTR lpDIBHdr, DWORD dwOffBits, HDC hdc ); extern HGLOBAL DibFromBitmap ( HBITMAP hBitmap, DWORD dwStyle, WORD wBits, CPalette* pPal, HBITMAP hMaskBitmap, DWORD& dwSize, LONG cXPelsPerMeter, LONG cYPelsPerMeter ); extern LPSTR FindDIBBits ( LPSTR lpbi, DWORD dwOffBits = 0 ); extern WORD PaletteSize ( LPSTR lpbi ); extern void FreeDib ( HGLOBAL hDib ); extern CPalette* CreatePalette ( const COLORREF* colors, int nColors ); extern CPalette* MergePalettes ( CPalette *pPal1, CPalette *pPal2, int& iAdds ); extern void AdjustPointForGrid( CPoint *ptPointLocation );
// drawing support functions
extern void StretchCopy (HDC, int, int, int, int, HDC, int, int, int, int); extern void FillImgRect (HDC hDC, CRect * prc, COLORREF cr ); extern void BrushLine (CDC* pDC, CPoint fromPt, CPoint toPt, int nWidth, int nShape); extern void DrawDCLine (HDC hDC, CPoint pt1, CPoint pt2, COLORREF color, int nWidth, int nShape, CRect& rc); extern void DrawImgLine (IMG* pimg, CPoint pt1, CPoint pt2, COLORREF color, int nWidth, int nShape, BOOL bCommit); extern void Mylipse (HDC hDC, int x1, int y1, int x2, int y2, BOOL bFilled);
// PATSTENCIL:
// This is a ternary raster operation, listed in the SDK ref as "PSDPxax",
// but I prefer to think of it as "DSaPSnao". More practically, this rop
// is useful to apply the color of the current brush to only those pixels
// where the source bitmap is zero (black). That is, a binary bitmap as the
// source will be drawn onto the destination in the color of the current
// brush.
//
#define PATSTENCIL 0xB8074AL
// DrawBitmap:
// This draws a bitmap on a display context with a given raster operation.
// CDC* dc The target display context.
// CBitmap* bmSrc The bitmap to be drawn.
// CRect* rc A position rectangle.
// If NULL, bitmap drawn with the upper-left at 0, 0.
// Otherwise, bitmap drawn centered in this rectangle.
// Result is not clipped to the rectangle.
// DWORD dwROP Raster operation. See table 11.3 of the Win30 SDK ref.
// CDC* memdc A memory context for the BitBlt process to use.
// If NULL, DrawBitmap creates and destroys its own.
//
void DrawBitmap(CDC* dc, CBitmap* bmSrc, CRect* rc, DWORD dwROP = SRCCOPY, CDC* memdc = NULL);
extern HDC hRubberDC; extern HBITMAP hRubberBM; extern HBITMAP g_hUndoImgBitmap; extern HPALETTE g_hUndoPalette; extern int cxRubberWidth; extern int cyRubberHeight; extern IMG* pRubberImg; extern WORD gwClipboardFormat; extern CBrush g_brSelectHorz; extern CBrush g_brSelectVert;
CPalette *PBSelectPalette(CDC *pDC, CPalette *pPalette, BOOL bForceBk);
class CTempBitmap : public CBitmap { public: ~CTempBitmap() { DeleteObject(); } // DeleteObject checks for NULL
} ;
#endif // __IMGSUPRT_H__
|