78518ba3e1892ae994f4b80dd266903f6c121882
prtctrl/ を参照専用として gitignore に追加 旧 USB 直結制御アプリ(LabelPrnUtil、SVN 作業コピー一式 約335MB)は プロトコル参照用にローカル保持し、git 管理対象外とする。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> @
AveryDennisonUtil
ラベル/レシートのレイアウトを画面上で設計し、Windows プリンターへ印刷する MFC (VC++) デスクトップアプリ。 高価な中華製ラベルソフトの置き換えを目的とする。ダイアログベースアプリ(左側にボタン列、右側に編集キャンバス)。
できること
- 全印刷領域(用紙/ラベルサイズ)の確定(
用紙サイズボタン。ロールラベルのプリセット + 余白指定) - 複数の印刷領域(ゾーン)の配置・サイズ変更(ドラッグ移動 / ハンドルでリサイズ)
- 各領域に印刷するデータの入力
- テキスト(フォント・サイズ・揃え・太字)
- 矩形枠 / 直線(区切り)
- 画像(PNG/JPG/BMP、
.otzに埋め込み)
- 編集操作
- コピー / 貼付け / 複製(
Ctrl+C/Ctrl+V/Ctrl+D) - 重なり順(
前面/背面ボタン、Ctrl+]/Ctrl+[で前後へ) - 整列(
整列...ボタン → 用紙/余白を基準に 左右中央/上下中央など) - グリッド/スナップ(
グリッド/スナップチェック、1mm グリッド。矢印キーで微調整、Shiftで大きく)
- コピー / 貼付け / 複製(
- 原紙(位置合わせ用の背景下絵)
原紙...ボタンで画像を読み込み、用紙全体に敷く(画面では薄く表示し、上に載せるアイテムの位置合わせを容易にする)- 読み込み時に 用紙サイズを原紙ファイルのサイズに合わせる。px→mm 換算の基準を選択可能:
- 画像の埋め込みDPI(ファイル本来の実寸)/ 用紙のDPI設定 / 変更しない
原紙を印刷チェックで、原紙自身を印刷する/しないを選択(既定 = 印刷しない=既存の印刷済みラベルに重ねる用途)消去で原紙を除去。原紙画像は.otzに埋め込み保存
- Windows プリンターへ印刷(GDI、
CPrintDialog経由の直接印刷。ラベル mm(0,0) を印字可能領域の左上に合わせて出力) - レイアウトの保存・再読込(
*.otz。版数つきヘッダで前方/後方互換に配慮)
アーキテクチャ(要点)
- すべてのジオメトリは 1/100 mm の整数で保持(ピクセルで持たない)。
- 描画は各アイテムの
Draw(CDC&, const CoordMap&)ただ 1 つに集約し、 画面エディタと印刷で同一コードを共有。違いはCoordMapが持つ DPI とズームだけ。 - これにより画面(≒96dpi)とサーマルラベル(≒203dpi)で同一レイアウトが 物理的に正しいサイズで出力される。
| 役割 | クラス |
|---|---|
| アプリ(ダイアログ起動のみ) | CAveryDennisonUtilApp (AveryDennisonUtil.cpp) |
| メイン ダイアログ(ボタン・ファイル・印刷) | CMainDialog : CDialog (MainDialog.cpp) |
| 編集キャンバス(子ウィンドウ・マウス操作) | CCanvas : CWnd (Canvas.cpp) |
| データモデル(用紙+アイテム列・.otz 保存) | CLabelLayout (LabelLayout.cpp) |
| 共有描画(画面・印刷) | Render::DrawLayout (RenderScene.cpp) |
| 単位変換 | CoordMap (CoordMap.h) |
| アイテム | CPrintItem 派生:CTextItem / CShapeItem / CImageItem |
ビルド / デバッグ
- VS2022 (v143) / x64 / MFC・CRT は静的リンク。単一 exe で外部 DLL に依存しないため、
Visual Studio 2022 で
AveryDennisonUtil.slnを開き、構成 Debug(または Release)/x64 を選んで F5(デバッグ実行)するだけで動く(Debug 用 DLL の配置は不要)。 - コマンドラインからビルドする場合:
& "C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\MSBuild.exe" `
AveryDennisonUtil.sln /p:Configuration=Debug /p:Platform=x64
- 出力:
bin\Debug\AveryDennisonUtil.exe(Release はbin\Release\)。 - 補足: このマシンには vcpkg のグローバル統合が入っているが、本プロジェクトは未使用のため
.vcxprojでVcpkgEnabled=falseにして無効化済み(不要な include 注入と pwsh デプロイ手順を回避)。
使い方
用紙サイズボタンでラベル寸法を設定(ロールラベルのプリセットあり。余白を入れると破線ガイドが出て整列の基準になる)。テキスト/画像/矩形枠/直線ボタンでアイテムを追加。- キャンバス上でドラッグ移動、ハンドルでリサイズ。ダブルクリック(または
プロパティボタン)で編集。Delキー /削除ボタンで削除。 - コピー/複製(
コピー+貼付または複製/Ctrl+C,V,D)、重なり順(前面/背面)、整列...で配置を整える。グリッド/スナップを入れると 1mm グリッドへ吸着し、矢印キーで微調整できる(Shiftで大きく移動)。 - 既存ラベル等に合わせたい場合は
原紙...で下絵を読み込む。読込時に用紙を原紙サイズへ合わせるか(埋め込みDPI / 用紙DPI)を選択。薄く表示された原紙に合わせてアイテムを配置し、原紙そのものも印刷したいときは原紙を印刷をチェック。 印刷ボタン → プリンタを選んで印刷。保存/名前を付けて保存で.otz保存、開くで再読込。
検証のヒント
実機が無い場合、Microsoft Print to PDF へ印刷すると 203dpi 相当の解像度差を含めて
配置・サイズが mm 通りかを PDF 上で確認できる。
Languages
C++
95.8%
C
4.2%