1 /* 2 * PROJECT: PAINT for ReactOS 3 * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later) 4 * PURPOSE: Providing the canvas window class 5 * COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net> 6 */ 7 8 #pragma once 9 10 class CCanvasWindow : public CWindowImpl<CCanvasWindow> 11 { 12 public: 13 DECLARE_WND_CLASS_EX(_T("ReactOSPaintCanvas"), CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW, 14 COLOR_APPWORKSPACE) 15 16 BEGIN_MSG_MAP(CCanvasWindow) 17 MESSAGE_HANDLER(WM_SIZE, OnSize) 18 MESSAGE_HANDLER(WM_PAINT, OnPaint) 19 MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove) 20 MESSAGE_HANDLER(WM_HSCROLL, OnHScroll) 21 MESSAGE_HANDLER(WM_VSCROLL, OnVScroll) 22 MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd) 23 MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown) 24 MESSAGE_HANDLER(WM_RBUTTONDOWN, OnRButtonDown) 25 MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnLButtonDblClk) 26 MESSAGE_HANDLER(WM_RBUTTONDBLCLK, OnRButtonDblClk) 27 MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown) 28 MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUp) 29 MESSAGE_HANDLER(WM_RBUTTONUP, OnRButtonUp) 30 MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor) 31 MESSAGE_HANDLER(WM_MOUSEWHEEL, OnMouseWheel) 32 MESSAGE_HANDLER(WM_CANCELMODE, OnCancelMode) 33 MESSAGE_HANDLER(WM_CAPTURECHANGED, OnCaptureChanged) 34 MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorEdit) 35 MESSAGE_HANDLER(WM_PALETTEMODELCOLORCHANGED, OnPaletteModelColorChanged) 36 END_MSG_MAP() 37 38 CCanvasWindow(); 39 virtual ~CCanvasWindow(); 40 41 BOOL m_drawing; 42 43 VOID cancelDrawing(); 44 VOID finishDrawing(); 45 VOID updateScrollInfo(); 46 47 VOID ImageToCanvas(POINT& pt); 48 VOID ImageToCanvas(RECT& rc); 49 VOID CanvasToImage(POINT& pt, BOOL bZoomed = FALSE); 50 VOID CanvasToImage(RECT& rc, BOOL bZoomed = FALSE); 51 VOID GetImageRect(RECT& rc); 52 VOID MoveSelection(INT xDelta, INT yDelta); 53 54 protected: 55 HITTEST m_hitSelection; 56 HITTEST m_hitCanvasSizeBox; 57 POINT m_ptOrig; // The origin of drag start 58 HBITMAP m_ahbmCached[2]; // The cached buffer bitmaps 59 CRect m_rcResizing; // Resizing rectagle 60 61 HITTEST CanvasHitTest(POINT pt); 62 RECT GetBaseRect(); 63 VOID DoDraw(HDC hDC, RECT& rcClient, RECT& rcPaint); 64 VOID OnHVScroll(WPARAM wParam, INT fnBar); 65 VOID drawZoomFrame(INT mouseX, INT mouseY); 66 67 HITTEST SelectionHitTest(POINT ptImage); 68 VOID StartSelectionDrag(HITTEST hit, POINT ptImage); 69 VOID SelectionDragging(POINT ptImage); 70 VOID EndSelectionDrag(POINT ptImage); 71 72 LRESULT OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 73 LRESULT OnHScroll(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 74 LRESULT OnVScroll(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 75 LRESULT OnEraseBkgnd(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 76 LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 77 LRESULT OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 78 LRESULT OnRButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 79 LRESULT OnLButtonDblClk(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 80 LRESULT OnRButtonDblClk(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 81 LRESULT OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 82 LRESULT OnKeyDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 83 LRESULT OnLButtonUp(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 84 LRESULT OnRButtonUp(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 85 LRESULT OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 86 LRESULT OnMouseWheel(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 87 LRESULT OnCancelMode(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 88 LRESULT OnCaptureChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 89 LRESULT OnCtlColorEdit(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 90 LRESULT OnPaletteModelColorChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 91 92 LRESULT OnLRButtonDown(BOOL bLeftButton, UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 93 LRESULT OnLRButtonDblClk(BOOL bLeftButton, UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 94 LRESULT OnLRButtonUp(BOOL bLeftButton, UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 95 }; 96