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
+76
View File
@@ -0,0 +1,76 @@
// PaperSizeDlg.cpp
#include "pch.h"
#include "AveryDennisonUtil.h"
#include "PaperSizeDlg.h"
IMPLEMENT_DYNAMIC(CPaperSizeDlg, CDialog)
// ロールラベルのよく使う寸法プリセット(幅mm, 高さmm, dpi)
struct Preset { LPCTSTR name; double w; double h; int dpi; };
static const Preset kPresets[] = {
{ _T("ロールラベル 40×30mm (203dpi)"), 40, 30, 203 },
{ _T("ロールラベル 50×30mm (203dpi)"), 50, 30, 203 },
{ _T("ロールラベル 32×25mm (203dpi)"), 32, 25, 203 },
{ _T("ロールラベル 60×40mm (203dpi)"), 60, 40, 203 },
{ _T("レシート 58mm幅 (203dpi)"), 58, 40, 203 },
{ _T("カスタム"), 0, 0, 0 },
};
static const int kPresetCount = sizeof(kPresets) / sizeof(kPresets[0]);
// コンストラクタ。各値を既定(40×30mm, 203dpi, 余白0)で初期化。
CPaperSizeDlg::CPaperSizeDlg(CWnd* pParent)
: CDialog(IDD_PAPER_SIZE, pParent)
, m_widthMm(40.0)
, m_heightMm(30.0)
, m_dpi(203)
, m_marginMm(0.0)
{
}
// 入力欄と各メンバ変数の関連付け+範囲検証(幅/高さ/DPI/余白)。
void CPaperSizeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_WIDTH, m_widthMm);
DDV_MinMaxDouble(pDX, m_widthMm, 1.0, 2000.0);
DDX_Text(pDX, IDC_EDIT_HEIGHT, m_heightMm);
DDV_MinMaxDouble(pDX, m_heightMm, 1.0, 2000.0);
DDX_Text(pDX, IDC_EDIT_DPI, m_dpi);
DDV_MinMaxInt(pDX, m_dpi, 50, 1200);
DDX_Text(pDX, IDC_EDIT_MARGIN, m_marginMm);
DDV_MinMaxDouble(pDX, m_marginMm, 0.0, 100.0);
}
// 初期化。プリセット コンボにロールラベル等の候補を流し込み、既定で「カスタム」を選ぶ。
BOOL CPaperSizeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CComboBox* pc = (CComboBox*)GetDlgItem(IDC_COMBO_PRESET);
if (pc)
{
for (int i = 0; i < kPresetCount; ++i)
pc->AddString(kPresets[i].name);
pc->SetCurSel(kPresetCount - 1); // 既定はカスタム
}
return TRUE;
}
// プリセット選択変更時。選んだ寸法/DPI を各入力欄へ反映する(カスタムは現状維持)。
void CPaperSizeDlg::OnPresetChanged()
{
CComboBox* pc = (CComboBox*)GetDlgItem(IDC_COMBO_PRESET);
if (!pc) return;
int sel = pc->GetCurSel();
if (sel < 0 || sel >= kPresetCount) return;
const Preset& ps = kPresets[sel];
if (ps.w <= 0) return; // カスタムは現状値を維持
m_widthMm = ps.w;
m_heightMm = ps.h;
m_dpi = ps.dpi;
UpdateData(FALSE);
}
BEGIN_MESSAGE_MAP(CPaperSizeDlg, CDialog)
ON_CBN_SELCHANGE(IDC_COMBO_PRESET, &CPaperSizeDlg::OnPresetChanged)
END_MESSAGE_MAP()