📄 dialog.cpp
字号:
#include "precomp.hxx"
#include "local.h"
#include "resource.h"
#include "dialog.h"
BOOL bIsInch=FALSE;
void SetFieldData(HWND hwnd, DWORD nData)
{
TCHAR szTmp[20];
if (bIsInch)
{
wsprintf(szTmp, TEXT("%5.2f"), MM2INCH(nData));
SetWindowText(hwnd, szTmp);
}
else
{
wsprintf(szTmp, TEXT("%d"), (nData+5)/10);
SetWindowText(hwnd, szTmp);
}
}
BOOL
APIENTRY
PrintDlg(
HWND hwnd,
WORD msg,
WPARAM wparam,
LPARAM lparam
)
{
switch(msg)
{
case WM_INITDIALOG:
return PrintInitDlg(hwnd);
case WM_CTLCOLORDLG:
case WM_CTLCOLORBTN:
case WM_CTLCOLORSTATIC:
return (BOOL)GetStockObject(WHITE_BRUSH);
case WM_COMMAND:
if (HIWORD(wparam) == 0)
{
switch (LOWORD(wparam))
{
case IDOK:
EndDialog(hwnd, TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hwnd, FALSE);
SetLastError(ERROR_CANCELLED);
return TRUE;
case IDC_START:
return PrintStartDlg(hwnd);
case IDC_MORE:
{
int nPaper=g_pParam->nPaper;
g_pParam->nPaper = SendMessage(GetDlgItem(hwnd,IDC_PAPER), CB_GETCURSEL, 0, 0);
DialogBoxParam( g_hInstance,
MAKEINTRESOURCE(IDD_MORE_DIALOG),
NULL,
(DLGPROC)MoreDlg,
lparam);
g_pParam->nPaper = nPaper;
}
return TRUE;
default:
break;
}
}
else
{
switch (HIWORD(wparam))
{
case CBN_CLOSEUP:
{
int nSel=SendMessage(GetDlgItem(hwnd,IDC_PAPER), CB_GETCURSEL, 0, 0);
EnableWindow(GetDlgItem(hwnd, IDC_WIDTH), (nSel==2));
EnableWindow(GetDlgItem(hwnd, IDC_HEIGHT), (nSel==2));
}
break;
default:
break;
}
}
default:
break;
}
return FALSE;
}
BOOL
PrintInitDlg(
HWND hwnd
)
{
HWND hDlg;
TCHAR szTmp[20];
// IDC_PORT
hDlg = GetDlgItem(hwnd, IDC_PORT);
SendMessage(hDlg, CB_ADDSTRING, 0, (LPARAM)TEXT("Infrared"));
SendMessage(hDlg, CB_ADDSTRING, 0, (LPARAM)TEXT("COM1:"));
SendMessage(hDlg, CB_ADDSTRING, 0, (LPARAM)TEXT("COM2:"));
SendMessage(hDlg, CB_ADDSTRING, 0, (LPARAM)TEXT("COM6:"));
if (g_pParam->nPort == 0)
{
SetWindowText(hDlg, TEXT("Infrared"));
}
else if (g_pParam->nPort == 1)
{
SetWindowText(hDlg, TEXT("COM1:"));
}
else if (g_pParam->nPort == 2)
{
SetWindowText(hDlg, TEXT("COM2:"));
}
else
{
SetWindowText(hDlg, TEXT("COM6:"));
}
// IDC_PAPER
hDlg = GetDlgItem(hwnd, IDC_PAPER);
SendMessage(hDlg, CB_ADDSTRING, 0, (LPARAM)TEXT("A6 Sheet Paper"));
SendMessage(hDlg, CB_ADDSTRING, 0, (LPARAM)TEXT("A6 Roll Paper"));
SendMessage(hDlg, CB_ADDSTRING, 0, (LPARAM)TEXT("Custom"));
SendMessage(hDlg, CB_SETCURSEL, g_pParam->nPaper, 0);
if (g_pParam->nPaper == 0) // A6 Sheet Paper
g_pParam->nForm = 0; // Always use normal form feed
// Custom Paper
EnableWindow(GetDlgItem(hwnd, IDC_WIDTH), (g_pParam->nPaper==2));
EnableWindow(GetDlgItem(hwnd, IDC_HEIGHT), (g_pParam->nPaper==2));
// Oriental
if (!g_pParam->bLandscape)
{
CheckRadioButton(hwnd, IDC_PORTRAIT, IDC_LANDSCAPE, IDC_PORTRAIT);
}
else
{
CheckRadioButton(hwnd, IDC_PORTRAIT, IDC_LANDSCAPE, IDC_LANDSCAPE);
}
// Custom Paper
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IMEASURE, szTmp, 20);
if (szTmp[0] == '0')
bIsInch = FALSE;
else
bIsInch = TRUE;
if (bIsInch)
{
for (int i=IDC_MUNIT1; i<=IDC_MUNIT2; i++)
SetWindowText(GetDlgItem(hwnd,i), TEXT(" in"));
wsprintf(szTmp, TEXT("%5.2f"), MM2INCH(g_pParam->nWidth));
SetDlgItemText(hwnd, IDC_WIDTH, szTmp);
wsprintf(szTmp, TEXT("%5.2f"), MM2INCH(g_pParam->nHeight));
SetDlgItemText(hwnd, IDC_HEIGHT, szTmp);
}
else
{
wsprintf(szTmp, TEXT("%d"), (g_pParam->nWidth+5)/10);
SetDlgItemText(hwnd, IDC_WIDTH, szTmp);
wsprintf(szTmp, TEXT("%d"), (g_pParam->nHeight+5)/10);
SetDlgItemText(hwnd, IDC_HEIGHT, szTmp);
}
return TRUE;
}
BOOL
PrintStartDlg(
HWND hwnd
)
{
HWND hDlg;
BOOL bInvalid;
TCHAR szTmp[20];
float nTmp;
// IDC_PORT
hDlg = GetDlgItem(hwnd, IDC_PORT);
GetWindowText(hDlg, szTmp, 20);
if (!_tcscmp(szTmp, TEXT("Infrared")))
{
g_pParam->nPort = 0;
}
else if (!_tcscmp(szTmp, TEXT("COM1:")))
{
g_pParam->nPort = 1;
}
else if (!_tcscmp(szTmp, TEXT("COM2:")))
{
g_pParam->nPort = 2;
}
else
{
g_pParam->nPort = 3;
}
// IDC_PAPER
hDlg = GetDlgItem(hwnd, IDC_PAPER);
GetWindowText(hDlg, szTmp, 20);
g_pParam->nPaper = SendMessage(GetDlgItem(hwnd,IDC_PAPER), CB_GETCURSEL, 0, 0);
switch (g_pParam->nPaper)
{
case 0: // A6 Sheet Paper
g_pParam->nWidth = A6PAPER_WIDTH;
g_pParam->nHeight = A6PAPER_HEIGHT;
g_pParam->nForm = 0;
break;
case 1: // A6 Roll Paper
g_pParam->nWidth = A6PAPER_WIDTH;
g_pParam->nHeight = A6PAPER_HEIGHT*2;
break;
default: // Custom Paper
bInvalid = FALSE;
GetDlgItemText(hwnd, IDC_WIDTH, szTmp, 20);
if (swscanf(szTmp, TEXT("%f"), &nTmp) == EOF)
bInvalid = TRUE;
if (!bInvalid)
{
if (bIsInch)
g_pParam->nWidth = INCH2MM(nTmp);
else
g_pParam->nWidth = (DWORD)(nTmp*100+5)/10;
}
if (bInvalid || (g_pParam->nWidth <= (DWORD)(g_pParam->rcMargin.left+g_pParam->rcMargin.right)))
{
MessageBox(NULL, TEXT("Invalid Paper Width"), TEXT("ERROR"), MB_TOPMOST|MB_SETFOREGROUND|MB_OK);
return FALSE;
}
bInvalid = FALSE;
GetDlgItemText(hwnd, IDC_HEIGHT, szTmp, 20);
if (swscanf(szTmp, TEXT("%f"), &nTmp) == EOF)
bInvalid = TRUE;
if (!bInvalid)
{
if (bIsInch)
g_pParam->nHeight = INCH2MM(nTmp);
else
g_pParam->nHeight = (DWORD)(nTmp*100+5)/10;
}
if (bInvalid || (g_pParam->nHeight <= (DWORD)(g_pParam->rcMargin.top+g_pParam->rcMargin.bottom)))
{
MessageBox(NULL, TEXT("Invalid Paper Height"), TEXT("ERROR"), MB_TOPMOST|MB_SETFOREGROUND|MB_OK);
return FALSE;
}
}
// Oriental
hDlg = GetDlgItem(hwnd, IDC_PORTRAIT);
if (SendMessage(hDlg, BM_GETCHECK, 0, 0))
{
g_pParam->bLandscape = FALSE;
}
else
{
g_pParam->bLandscape = TRUE;
}
g_pParam->nXpixel = (g_pParam->nWidth-g_pParam->rcMargin.left-g_pParam->rcMargin.right)*400/254;
g_pParam->nYpixel = (g_pParam->nHeight-g_pParam->rcMargin.top-g_pParam->rcMargin.bottom)*400/254;
EndDialog(hwnd, TRUE);
return TRUE;
}
BOOL
APIENTRY
MoreDlg(
HWND hwnd,
WORD msg,
WPARAM wparam,
LPARAM lparam
)
{
switch(msg)
{
case WM_INITDIALOG:
return MoreInitDlg(hwnd);
case WM_CTLCOLORDLG:
case WM_CTLCOLORBTN:
case WM_CTLCOLORSTATIC:
return (BOOL)GetStockObject(WHITE_BRUSH);
case WM_COMMAND:
switch (LOWORD(wparam))
{
case IDOK:
return MoreOKDlg(hwnd);
case IDCANCEL:
EndDialog(hwnd, FALSE);
SetLastError(ERROR_CANCELLED);
return TRUE;
default:
break;
}
default:
break;
}
return FALSE;
}
BOOL
MoreInitDlg(
HWND hwnd
)
{
TCHAR szTmp[20];
// Margin
if (bIsInch)
{
for (int i=IDC_MUNIT1; i<=IDC_MUNIT5; i++)
SetWindowText(GetDlgItem(hwnd,i), TEXT(" in"));
/*
wsprintf(szTmp, TEXT("%5.2f"), MM2INCH(g_pParam->rcMargin.top));
SetDlgItemText(hwnd, IDC_TOP, szTmp);
wsprintf(szTmp, TEXT("%5.2f"), MM2INCH(g_pParam->rcMargin.bottom));
SetDlgItemText(hwnd, IDC_BOTTOM, szTmp);
wsprintf(szTmp, TEXT("%5.2f"), MM2INCH(g_pParam->rcMargin.left));
SetDlgItemText(hwnd, IDC_LEFT, szTmp);
wsprintf(szTmp, TEXT("%5.2f"), MM2INCH(g_pParam->rcMargin.right));
SetDlgItemText(hwnd, IDC_RIGHT, szTmp);
*/
wsprintf(szTmp, TEXT("%5.2f"), MM2INCH(g_pParam->nScroll));
SetDlgItemText(hwnd, IDC_SCROLL, szTmp);
}
else
{
/*
wsprintf(szTmp, TEXT("%d"), (g_pParam->rcMargin.top+5)/10);
SetDlgItemText(hwnd, IDC_TOP, szTmp);
wsprintf(szTmp, TEXT("%d"), (g_pParam->rcMargin.bottom+5)/10);
SetDlgItemText(hwnd, IDC_BOTTOM, szTmp);
wsprintf(szTmp, TEXT("%d"), (g_pParam->rcMargin.left+5)/10);
SetDlgItemText(hwnd, IDC_LEFT, szTmp);
wsprintf(szTmp, TEXT("%d"), (g_pParam->rcMargin.right+5)/10);
SetDlgItemText(hwnd, IDC_RIGHT, szTmp);
*/
wsprintf(szTmp, TEXT("%d"), (g_pParam->nScroll+5)/10);
SetDlgItemText(hwnd, IDC_SCROLL, szTmp);
}
// Form Feed
if (g_pParam->nPaper == 0)
g_pParam->nForm = 0;
if (g_pParam->nForm == 0)
{
CheckRadioButton(hwnd, IDC_FORM1, IDC_FORM2, IDC_FORM1);
}
else
{
CheckRadioButton(hwnd, IDC_FORM1, IDC_FORM2, IDC_FORM2);
}
EnableWindow(GetDlgItem(hwnd, IDC_FORM1), (g_pParam->nPaper!=0));
EnableWindow(GetDlgItem(hwnd, IDC_FORM2), (g_pParam->nPaper!=0));
EnableWindow(GetDlgItem(hwnd, IDC_SCROLL), (g_pParam->nPaper!=0));
return TRUE;
}
BOOL
MoreOKDlg(
HWND hwnd
)
{
BOOL bInvalid;
HWND hDlg;
TCHAR szTmp[20];
float nTmp;
// Margin
/*
bInvalid = FALSE;
GetDlgItemText(hwnd, IDC_LEFT, szTmp, 20);
if (swscanf(szTmp, TEXT("%f"), &nTmp) == EOF)
bInvalid = TRUE;
if (!bInvalid)
{
if (bIsInch)
g_pParam->rcMargin.left = INCH2MM(nTmp);
else
g_pParam->rcMargin.left = (DWORD)(nTmp*100+5)/10;
}
if (bInvalid || (g_pParam->rcMargin.left/10 < MIN_MARGIN_LEFT/10))
{
MessageBox(NULL, TEXT("Invalid Left Margin"), TEXT("ERROR"), MB_TOPMOST|MB_SETFOREGROUND|MB_OK);
SetFieldData(GetDlgItem(hwnd,IDC_LEFT), MIN_MARGIN_LEFT);
return FALSE;
}
bInvalid = FALSE;
GetDlgItemText(hwnd, IDC_RIGHT, szTmp, 20);
if (swscanf(szTmp, TEXT("%f"), &nTmp) == EOF)
bInvalid = TRUE;
if (!bInvalid)
{
if (bIsInch)
g_pParam->rcMargin.right = INCH2MM(nTmp);
else
g_pParam->rcMargin.right = (DWORD)(nTmp*100+5)/10;
}
if (bInvalid || (g_pParam->rcMargin.right/10 < MIN_MARGIN_RIGHT/10))
{
MessageBox(NULL, TEXT("Invalid Right Margin"), TEXT("ERROR"), MB_TOPMOST|MB_SETFOREGROUND|MB_OK);
SetFieldData(GetDlgItem(hwnd,IDC_RIGHT), MIN_MARGIN_RIGHT);
return FALSE;
}
if (g_pParam->rcMargin.left + g_pParam->rcMargin.right >= A6PAPER_WIDTH)
{
MessageBox(NULL, TEXT("Invalid Margin"), TEXT("ERROR"), MB_TOPMOST|MB_SETFOREGROUND|MB_OK);
SetFieldData(GetDlgItem(hwnd,IDC_LEFT), MIN_MARGIN_LEFT);
SetFieldData(GetDlgItem(hwnd,IDC_RIGHT), MIN_MARGIN_RIGHT);
return FALSE;
}
bInvalid = FALSE;
GetDlgItemText(hwnd, IDC_TOP, szTmp, 20);
if (swscanf(szTmp, TEXT("%f"), &nTmp) == EOF)
bInvalid = TRUE;
if (!bInvalid)
{
if (bIsInch)
g_pParam->rcMargin.top = INCH2MM(nTmp);
else
g_pParam->rcMargin.top = (DWORD)(nTmp*100+5)/10;
}
if (bInvalid || (g_pParam->rcMargin.top/10 < MIN_MARGIN_TOP/10))
{
MessageBox(NULL, TEXT("Invalid Top Margin"), TEXT("ERROR"), MB_TOPMOST|MB_SETFOREGROUND|MB_OK);
SetFieldData(GetDlgItem(hwnd,IDC_TOP), MIN_MARGIN_TOP);
return FALSE;
}
bInvalid = FALSE;
GetDlgItemText(hwnd, IDC_BOTTOM, szTmp, 20);
if (swscanf(szTmp, TEXT("%f"), &nTmp) == EOF)
bInvalid = TRUE;
if (!bInvalid)
{
if (bIsInch)
g_pParam->rcMargin.bottom = INCH2MM(nTmp);
else
g_pParam->rcMargin.bottom = (DWORD)(nTmp*100+5)/10;
}
if (bInvalid || (g_pParam->rcMargin.bottom/10 < MIN_MARGIN_BOTTOM/10))
{
MessageBox(NULL, TEXT("Invalid Bottom Margin"), TEXT("ERROR"), MB_TOPMOST|MB_SETFOREGROUND|MB_OK);
SetFieldData(GetDlgItem(hwnd,IDC_BOTTOM), MIN_MARGIN_BOTTOM);
return FALSE;
}
if (g_pParam->rcMargin.top + g_pParam->rcMargin.bottom >= A6PAPER_HEIGHT)
{
MessageBox(NULL, TEXT("Invalid Margin"), TEXT("ERROR"), MB_TOPMOST|MB_SETFOREGROUND|MB_OK);
SetFieldData(GetDlgItem(hwnd,IDC_TOP), MIN_MARGIN_TOP);
SetFieldData(GetDlgItem(hwnd,IDC_BOTTOM), MIN_MARGIN_BOTTOM);
return FALSE;
}
*/
// Form Feed
hDlg = GetDlgItem(hwnd, IDC_FORM1);
if (SendMessage(hDlg, BM_GETCHECK, 0, 0))
{
g_pParam->nForm = 0;
}
else
{
g_pParam->nForm = 1;
bInvalid = FALSE;
GetDlgItemText(hwnd, IDC_SCROLL, szTmp, 20);
if (swscanf(szTmp, TEXT("%f"), &nTmp) == EOF)
bInvalid = TRUE;
if (!bInvalid)
{
if (bIsInch)
g_pParam->nScroll = INCH2MM(nTmp);
else
g_pParam->nScroll = (DWORD)(nTmp*100+5)/10;
}
if (bInvalid)
{
MessageBox(NULL, TEXT("Invalid Scroll Length"), TEXT("ERROR"), MB_TOPMOST|MB_SETFOREGROUND|MB_OK);
SetFieldData(GetDlgItem(hwnd,IDC_SCROLL), DEFAULT_SCROLL);
return FALSE;
}
}
EndDialog(hwnd, TRUE);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -