Initial commit: OtozaiPrinter (AveryDennisonUtil) ラベル/レシート レイアウト設計・印刷 MFC アプリ

- 用紙設計キャンバス(1/100mm 基準)・テキスト/画像/矩形/直線アイテム
- コピー/複製/Zオーダー/整列/グリッドスナップ、原紙(下絵)読込と印刷可否
- GDI 直接印刷、.otz 保存/再読込(版数つき)
- MFC/CRT 静的リンクで VS2022 IDE から F5 デバッグ可
This commit is contained in:
yoshikazu
2026-06-05 17:27:29 +09:00
commit 19d1c39370
33 changed files with 3049 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
// 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);
};