// PrintItem.h : 印刷アイテムの抽象基底クラス // // 各印刷領域(ゾーン)を表す。位置・サイズは 1/100mm の CRect で保持。 // 描画は Draw() ただ1つに集約し、画面エディタと印刷で共有する。 #pragma once #include "CoordMap.h" enum class ItemType { Text, Rect, Line, Image }; class CPrintItem : public CObject { DECLARE_DYNAMIC(CPrintItem) // 抽象基底: SERIAL ではなく DYNAMIC(具象クラスのみ SERIAL) public: CPrintItem(); virtual ~CPrintItem(); // CObject のコピーコンストラクタはアクセス不可のため、明示的に提供する // (派生クラスの暗黙コピーコンストラクタ/Clone() が利用する) CPrintItem(const CPrintItem& src) : CObject(), m_rect(src.m_rect) {} CPrintItem& operator=(const CPrintItem& src) { m_rect = src.m_rect; return *this; } // --- 形状(1/100mm) --- CRect m_rect; // 正規化済み(left<=right, top<=bottom)を前提 void SetRect(const CRect& r) { m_rect = r; m_rect.NormalizeRect(); } const CRect& Rect() const { return m_rect; } // --- 種別 --- virtual ItemType Type() const = 0; // --- 描画(画面・印刷で共有) --- // selected が true のとき、画面エディタでは選択枠/ハンドルを描く(印刷時は false)。 virtual void Draw(CDC& dc, const CoordMap& map, bool selected) = 0; // --- 当たり判定(1/100mm 座標) --- virtual BOOL HitTest(const CPoint& huPt) const; // --- 複製 --- virtual CPrintItem* Clone() const = 0; // --- 永続化 --- virtual void Serialize(CArchive& ar) override; // 選択ハンドルの描画(共通)。ハンドルは 8 個(四隅+各辺中央)。 static void DrawSelection(CDC& dc, const CRect& devRect); // ハンドル位置(デバイス座標)を取得。index 0..7。見つからなければ false。 static int HitHandle(const CRect& devRect, const CPoint& devPt); static CRect HandleRectAt(const CRect& devRect, int index); };