- 用紙設計キャンバス(1/100mm 基準)・テキスト/画像/矩形/直線アイテム - コピー/複製/Zオーダー/整列/グリッドスナップ、原紙(下絵)読込と印刷可否 - GDI 直接印刷、.otz 保存/再読込(版数つき) - MFC/CRT 静的リンクで VS2022 IDE から F5 デバッグ可
50 lines
2.0 KiB
C++
50 lines
2.0 KiB
C++
// 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);
|
|
};
|