Files
AveryDennisonUtil/PaperSizeDlg.cpp
T
yoshikazu 19d1c39370 Initial commit: OtozaiPrinter (AveryDennisonUtil) ラベル/レシート レイアウト設計・印刷 MFC アプリ
- 用紙設計キャンバス(1/100mm 基準)・テキスト/画像/矩形/直線アイテム
- コピー/複製/Zオーダー/整列/グリッドスナップ、原紙(下絵)読込と印刷可否
- GDI 直接印刷、.otz 保存/再読込(版数つき)
- MFC/CRT 静的リンクで VS2022 IDE から F5 デバッグ可
2026-06-05 17:27:29 +09:00

77 lines
2.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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()