Initial commit: OtozaiPrinter (AveryDennisonUtil) ラベル/レシート レイアウト設計・印刷 MFC アプリ
- 用紙設計キャンバス(1/100mm 基準)・テキスト/画像/矩形/直線アイテム - コピー/複製/Zオーダー/整列/グリッドスナップ、原紙(下絵)読込と印刷可否 - GDI 直接印刷、.otz 保存/再読込(版数つき) - MFC/CRT 静的リンクで VS2022 IDE から F5 デバッグ可
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user