windows-nt/Source/XPSP1/NT/shell/osshell/accesory/mspaint/imgwnd.h
2020-09-26 16:20:57 +08:00

265 lines
8 KiB
C++

#ifndef __IMGWND_H__
#define __IMGWND_H__
#include "tracker.h"
// #define GRIDOPTIONS
class CBitmapObj;
// helper fns
BOOL IsUserEditingText();
BOOL TextToolProcessed( UINT nMessage );
// Mouse Tracking Information
typedef struct _mti
{
CPoint ptDown;
CPoint ptPrev;
CPoint pt;
BOOL fLeft;
BOOL fRight;
BOOL fCtrlDown;
} MTI;
class CImgWnd;
class CThumbNailView;
// Image
struct IMG
{
class CImgWnd* m_pFirstImgWnd;
CBitmapObj* m_pBitmapObj;
BOOL bDirty;
HDC hDC;
HDC hMaskDC; // May be NULL (for normal bitmaps)
// These are usually selected into hDC and hMaskDC respecively
HBITMAP hBitmap;
HBITMAP hBitmapOld;
HBITMAP hMaskBitmap;
HBITMAP hMaskBitmapOld;
CPalette* m_pPalette;
HPALETTE m_hPalOld;
int cxWidth;
int cyHeight;
int cPlanes;
int cBitCount;
int cXPelsPerMeter;
int cYPelsPerMeter;
int nResType;
int m_nLastChanged;
BOOL m_bTileGrid;
int m_cxTile;
int m_cyTile;
};
// Image Editor Window
class CImgWnd : public CWnd
{
protected:
static CImgWnd* c_pImgWndCur;
static CDragger* c_pResizeDragger;
static CTracker::STATE c_dragState;
DECLARE_DYNAMIC( CImgWnd )
public:
CImgWnd( IMG* pImg );
CImgWnd( CImgWnd *pImgWnd );
~CImgWnd();
BOOL Create( DWORD dwStyle, const RECT& rect,
CWnd* pParentWnd, UINT nID = 0 );
BOOL OnCmdMsg( UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo );
void ClientToImage(CPoint& point );
void ClientToImage(CRect& rect );
void ImageToClient(CPoint& point );
void ImageToClient(CRect& rect );
IMG* m_pImg;
inline IMG* GetImg() { return m_pImg; }
void SetImg( IMG* pImg );
inline CSize GetScrollPos() { return CSize( m_xScroll, m_yScroll ); }
void SetScroll( int xScroll, int yScroll );
void ShowBrush( CPoint ptHandle );
void PrepareForBrushChange( BOOL bPickup = TRUE, BOOL bErase = TRUE );
inline int GetZoom() { return m_nZoom; }
inline int GetPrevZoom() const { return m_nZoomPrev; }
void SetZoom( int nZoom );
BOOL MakeBrush( HDC hSourceDC, CRect rcSource );
void UpdPos(const CPoint& pt) { m_ptDispPos = pt; }
inline BOOL IsGridVisible() { return theApp.m_bShowGrid && m_nZoom > 3; }
void FinishUndo( const CRect& rect );
void RubberBandRect( HDC hDC, MTI* pmti, BOOL bErase );
void EraseTracker();
void CheckScrollBars();
void GetImageRect( CRect& rect );
CPalette* SetImgPalette( CDC* pdc, BOOL bForce = FALSE );
HPALETTE SetImgPalette( HDC hdc, BOOL bForce = FALSE );
CPalette* FixupDibPalette( LPSTR lpDib, CPalette* ppalDib );
BOOL IsSelectionAvailable( void );
BOOL IsPasteAvailable( void );
CRect GetDrawingRect( void );
static void SetToolCursor();
static inline CImgWnd* GetCurrent() { return c_pImgWndCur; }
BOOL PtInTracker(CPoint cptLocation);
protected:
void RubberMouse (unsigned code, MTI* pmti);
void OnRButtonDownInSel (CPoint *pcPointDown);
void ZoomedInDP ( unsigned code, unsigned mouseKeys, CPoint newPt );
void StartSelectionDrag ( unsigned code, CPoint newPt );
void CancelSelectionDrag ();
void SelectionDragHandler( unsigned code, CPoint newPt );
void ResizeMouseHandler ( unsigned code, CPoint newPt );
void EndResizeOperation ();
void MoveBrush ( const CRect& newSelRect );
void OnScroll ( BOOL bVert, UINT nSBCode, UINT nPos );
BOOL OnMouseDown ( UINT nFlags );
BOOL OnMouseMessage ( UINT nFlags );
void CancelPainting ();
afx_msg int OnCreate ( LPCREATESTRUCT lpCreateStruct );
#if 0
afx_msg void OnDestroy ();
#endif
afx_msg void OnSetFocus ( CWnd* pOldWnd );
afx_msg void OnKillFocus ( CWnd* pNewWnd );
afx_msg void OnSize ( UINT nType, int cx, int cy );
afx_msg void OnLButtonDown ( UINT nFlags, CPoint point );
afx_msg void OnLButtonDblClk( UINT nFlags, CPoint point );
afx_msg void OnLButtonUp ( UINT nFlags, CPoint point );
afx_msg void OnRButtonDown ( UINT nFlags, CPoint point );
afx_msg void OnRButtonDblClk( UINT nFlags, CPoint point );
afx_msg void OnRButtonUp ( UINT nFlags, CPoint point );
afx_msg void OnKeyDown ( UINT nChar, UINT nRepCnt, UINT nFlags );
afx_msg void OnKeyUp ( UINT nChar, UINT nRepCnt, UINT nFlags );
afx_msg void OnMouseMove ( UINT nFlags, CPoint point );
afx_msg void OnTimer ( UINT nIDEvent );
afx_msg void OnVScroll ( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );
afx_msg void OnHScroll ( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );
afx_msg void OnPaint ();
afx_msg void OnCancelMode ();
afx_msg void OnWindowPosChanging( WINDOWPOS FAR* lpwndpos );
afx_msg void OnDestroyClipboard();
afx_msg void OnPaletteChanged(CWnd *);
afx_msg BOOL OnSetCursor (CWnd *pWnd, UINT nHitTest, UINT message);
afx_msg BOOL OnMouseWheel (UINT nFlags, short zDelta, CPoint pt);
void CmdSmallBrush();
void CmdSmallerBrush();
void CmdLargerBrush();
void CmdClearImage();
void CmdShowGrid();
#ifdef GRIDOPTIONS
void CmdGridOptions();
void CmdShowTileGrid();
#endif // GRIDOPTIONS
void CmdInvMode();
void CmdTransMode();
void CmdCopy();
void CmdCut();
void CmdPaste();
void CmdClear();
void CmdInvertColors();
void CmdTglOpaque();
void CmdFlipBshH();
void CmdFlipBshV();
void CmdRot90();
void CmdSkewBrush( int wAngle, BOOL bHorz );
void CmdDoubleBsh();
void CmdHalfBsh();
void CmdSel2Bsh();
void CmdExport();
void CmdCancel();
void CmdOK();
void GetDrawRects(const CRect* pPaintRect, const CRect* pReqDestRect,
CRect& srcRect, CRect& destRect);
void DrawGrid(CDC* pDC, const CRect& srcRect, CRect& destRect);
void DrawBackground(CDC* pDC, const CRect* pPaintRect = NULL);
void DrawTracker(CDC* pDC = NULL, const CRect* pPaintRect = NULL);
void DrawImage(CDC* pDC, const CRect* pPaintRect,
CRect* pDestRect = NULL, BOOL bDoGrid = TRUE);
void SetThumbnailView( CThumbNailView* pwndNewThumbnailView )
{ m_pwndThumbNailView = pwndNewThumbnailView; }
BOOL PasteImageClip();
BOOL PasteImageFile( LPSTR lpDib );
HBITMAP CopyDC( CDC* pImgDC, CRect* prcClip );
void CopyBMAndPal(HBITMAP *pBM, CPalette ** ppPal);
CImgWnd* m_pNextImgWnd; // next viewer link
int m_nZoom;
int m_nZoomPrev;
int m_xScroll;
int m_yScroll;
int m_LineX; // this is 1/32 of the bitmap height
int m_LineY; // this is 1/32 of the bitmap width
CPoint m_ptDispPos;
WORD m_wClipboardFormat;
HGLOBAL m_hPoints;
CThumbNailView* m_pwndThumbNailView;
DECLARE_MESSAGE_MAP()
friend class CPBFrame;
friend class CPBView;
friend class CBitmapObj;
friend class CSelectTool;
friend class CTextTool;
friend class CCurveTool;
friend class CTedit;
friend class CAttrEdit;
friend class CImgToolWnd; // for key message forwarding
friend class CImgColorsWnd;
friend class CCursorIconToolWnd;
friend BOOL SetImgSize(IMG*, CSize, BOOL);
friend void SetDrawColor(COLORREF);
friend void SetEraseColor(COLORREF);
friend void SetTransColor(COLORREF);
friend void FreeImg(IMG* pImg);
friend void AddImgWnd(IMG*, CImgWnd*);
friend void InvalImgRect(IMG* pImg, CRect* prc);
friend void CommitSelection(BOOL);
private:
short m_WheelDelta;
};
BOOL FillBitmapObj(CImgWnd* pImgWnd, CBitmapObj* pResObject, IMG* pImgStruct,
int iColor = -1);
extern CImgWnd* g_pMouseImgWnd;
extern CImgWnd* g_pDragBrushWnd;
extern CRect rcDragBrush;
#endif // __IMGWND_H__