// 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()