- 用紙設計キャンバス(1/100mm 基準)・テキスト/画像/矩形/直線アイテム - コピー/複製/Zオーダー/整列/グリッドスナップ、原紙(下絵)読込と印刷可否 - GDI 直接印刷、.otz 保存/再読込(版数つき) - MFC/CRT 静的リンクで VS2022 IDE から F5 デバッグ可
85 lines
2.9 KiB
C++
85 lines
2.9 KiB
C++
// Canvas.h : ラベル編集キャンバス(ダイアログ上の子ウィンドウ)
|
|
// 旧 CLabelView の編集ロジックを CWnd ベースに移植(スクロール無し・ズーム有り)。
|
|
#pragma once
|
|
|
|
#include "CoordMap.h"
|
|
|
|
class CLabelLayout;
|
|
class CPrintItem;
|
|
|
|
class CCanvas : public CWnd
|
|
{
|
|
public:
|
|
CCanvas();
|
|
virtual ~CCanvas();
|
|
|
|
BOOL Create(CWnd* pParent, const CRect& rc, UINT id);
|
|
void SetLayout(CLabelLayout* p) { m_pLayout = p; m_pSelected = nullptr; }
|
|
|
|
// ダイアログのボタンから呼ぶ操作
|
|
void InsertText();
|
|
void InsertRect();
|
|
void InsertLine();
|
|
void InsertImage();
|
|
void EditSelectedProperties();
|
|
void DeleteSelected();
|
|
void ZoomIn() { SetZoom(m_zoom * 1.25); }
|
|
void ZoomOut() { SetZoom(m_zoom / 1.25); }
|
|
void FitZoom(); // 用紙がキャンバスに収まる倍率へ
|
|
|
|
// コピー/複製/Zオーダー/整列(ダイアログ・キーから呼ぶ)
|
|
void CopySelected();
|
|
void Paste();
|
|
void DuplicateSelected();
|
|
void BringSelectedToFront();
|
|
void SendSelectedToBack();
|
|
void BringSelectedForward();
|
|
void SendSelectedBackward();
|
|
void AlignSelected(int how); // 0=左 1=水平中央 2=右 3=上 4=垂直中央 5=下
|
|
|
|
// グリッド/スナップ
|
|
void SetSnap(BOOL b) { m_snap = b; Invalidate(); }
|
|
BOOL GetSnap() const { return m_snap; }
|
|
|
|
BOOL HasSelection() const { return m_pSelected != nullptr; }
|
|
BOOL IsDirty() const { return m_dirty; }
|
|
void SetDirty(BOOL b) { m_dirty = b; }
|
|
void OnLayoutReplaced(); // New/Open 後の再描画+選択解除
|
|
|
|
double m_zoom;
|
|
|
|
protected:
|
|
CLabelLayout* m_pLayout;
|
|
CPrintItem* m_pSelected;
|
|
CPrintItem* m_pClipboard; // コピー保持(自前所有)
|
|
BOOL m_dirty;
|
|
BOOL m_snap; // グリッドスナップ有効
|
|
int m_gridHu; // グリッド間隔(1/100mm)
|
|
int SnapHu(int hu) const; // 最近接グリッドへ丸め
|
|
|
|
enum class Drag { None, Move, Resize };
|
|
Drag m_drag;
|
|
int m_dragHandle;
|
|
CPoint m_dragStartHu;
|
|
CRect m_origRect;
|
|
|
|
static const int kMargin = 14;
|
|
CoordMap MakeMap() const;
|
|
CoordMap MakeMap(int dpiX, int dpiY) const;
|
|
CPoint HuFromClient(CPoint pt);
|
|
void SetZoom(double z);
|
|
void AddAndSelect(CPrintItem* p);
|
|
|
|
afx_msg void OnPaint();
|
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
|
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
|
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
|
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
|
|
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
|
|
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
afx_msg UINT OnGetDlgCode(); // 矢印キー等をキャンバスへ届ける
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
};
|