- 用紙設計キャンバス(1/100mm 基準)・テキスト/画像/矩形/直線アイテム - コピー/複製/Zオーダー/整列/グリッドスナップ、原紙(下絵)読込と印刷可否 - GDI 直接印刷、.otz 保存/再読込(版数つき) - MFC/CRT 静的リンクで VS2022 IDE から F5 デバッグ可
77 lines
2.6 KiB
C++
77 lines
2.6 KiB
C++
// 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()
|