⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialog.cpp

📁 source code of printer under WinCE5.0!
💻 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 + -