📄 printtestdlgdlg.cpp
字号:
// PrintTestDlgDlg.cpp : implementation file
//
#include "stdafx.h"
#include "PrintTestDlg.h"
#include "PrintTestDlgDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPrintTestDlgDlg dialog
_ITEMPRINTINFOR itemPrint;
CPrintTestDlgDlg::CPrintTestDlgDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPrintTestDlgDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPrintTestDlgDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CPrintTestDlgDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPrintTestDlgDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPrintTestDlgDlg, CDialog)
//{{AFX_MSG_MAP(CPrintTestDlgDlg)
ON_BN_CLICKED(IDC_BTN_PRINT, OnBtnPrint)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPrintTestDlgDlg message handlers
BOOL CPrintTestDlgDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
InitConstPrintStruct();
return TRUE; // return TRUE unless you set the focus to a control
}
BOOL AdjustSelectPrinter(CString DeviceName,CString PortName,DWORD dwFlags)
{
//打印机
// if (DeviceName!="PCL Inkjet")
// {
// AfxMessageBox(DeviceName);
// AfxMessageBox(_T("打印机必须选择PCL_Inkjet"));
// return FALSE;
// }
//端口
// if (PortName!="LPT1:")
// {
// AfxMessageBox(_T("端口必须选择LPT1:,如果下拉列表没有LPT1:,请检查打印机是否连线正确并上电"));
// return FALSE;
// }
//纸张大小
if ((dwFlags & PD_SELECTA4)==0)
{
AfxMessageBox(_T("必须选择A4幅面纸张"));
return FALSE;
}
//草稿模式
// if ((dwFlags & PD_SELECTDRAFTMODE)!=0)
// {
// AfxMessageBox(_T("不能选择草稿模式"));
// return FALSE;
// }
//彩色
// if ((dwFlags & PD_SELECTPRINTINCOLOR)==0)
// {
// AfxMessageBox(_T("必须选择彩色模式"));
// return FALSE;
// }
//打印全部
if ((dwFlags & PD_SELECTALLPAGES)==0)
{
AfxMessageBox(_T("必须选择全部打印"));
return FALSE;
}
//横向打印
if ((dwFlags & PD_SELECTPORTRAIT)==0)
{
AfxMessageBox(_T("必须选择纵向打印"));
return FALSE;
}
return TRUE;
}
void CPrintTestDlgDlg::OnBtnPrint()
{
CPrintDialog dlg(FALSE);//让用户选择正确的打印机类型和端口号
if (dlg.DoModal()==IDOK){
//必须选择“确定”L"LPT1:"
CString DeviceName=dlg.GetDeviceName();
CString PortName=L"LPT1";//(LPCTSTR)dlg.GetPortName();
int a = GetLastError();
DWORD dwFlags=dlg.m_pd.dwFlags;
// if (AdjustSelectPrinter(DeviceName,PortName,dwFlags)){
//必须正确判断才打印
//AfxMessageBox(_T("Setup Right"));
//////////////////////////////////////////////////////
HDC hdcPrinter = dlg.GetPrinterDC();
if (hdcPrinter == NULL)
{
//没有打印机,或者在打印设置对话框中选择了×,而不是OK
AfxMessageBox(_T("打印机配置不正确"));
}
else
{
// Create a CDC and attach it to the default printer.
CDC dcPrinter;
dcPrinter.Attach(hdcPrinter);
// Call StartDoc() to begin printing.
DOCINFO docinfo;
memset(&docinfo, 0, sizeof(docinfo));
docinfo.cbSize = sizeof(docinfo);
docinfo.lpszDocName = _T("CDC::StartDoc() Code Fragment");
// If it fails, complain and exit gracefully.
if (dcPrinter.StartDoc(&docinfo) < 0)
{
AfxMessageBox(_T("Printer would not initalize"));
}
else
{
// Start a page.
if (dcPrinter.StartPage() < 0)
{
AfxMessageBox(_T("Could not start page"));
dcPrinter.AbortDoc();
}
else
{
// Do some printing.
//黑白打印,大字
CFont newFont;
newFont.CreateFont(
100, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("Arial"));
CFont* pOldFont = dcPrinter.SelectObject(&newFont);
dcPrinter.SetTextColor(RGB(120,150,0));
dcPrinter.ExtTextOut(800, 190,ETO_CLIPPED,NULL,itemPrint.sTile,itemPrint.sTile.GetLength(),NULL);
dcPrinter.SelectObject(pOldFont);
newFont.DeleteObject();
//大字体,彩色
CFont newFont1;
newFont1.CreateFont(
50, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("Arial"));
pOldFont = dcPrinter.SelectObject(&newFont1);
//右边字体,彩色
dcPrinter.SetTextColor(RGB(255,120,0));
dcPrinter.ExtTextOut(150, 305,ETO_CLIPPED,NULL,itemPrint.sName,3,NULL);
dcPrinter.ExtTextOut(150, 360,ETO_CLIPPED,NULL,itemPrint.sSex,3,NULL);
dcPrinter.ExtTextOut(150, 415,ETO_CLIPPED,NULL,itemPrint.sAge,3,NULL);
dcPrinter.ExtTextOut(150, 460,ETO_CLIPPED,NULL,itemPrint.sRemark,3,NULL);
//列表名称
dcPrinter.ExtTextOut(810,305,ETO_CLIPPED,NULL,itemPrint.sCode,itemPrint.sCode.GetLength(),NULL);
dcPrinter.ExtTextOut(1200,305,ETO_CLIPPED,NULL,itemPrint.sItemName,itemPrint.sItemName.GetLength(),NULL);
dcPrinter.ExtTextOut(1600,305,ETO_CLIPPED,NULL,itemPrint.sResult,itemPrint.sResult.GetLength(),NULL);
dcPrinter.ExtTextOut(1900,305,ETO_CLIPPED,NULL,itemPrint.sUnit,itemPrint.sUnit.GetLength(),NULL);
dcPrinter.ExtTextOut(2200,305,ETO_CLIPPED,NULL,itemPrint.sTarget,itemPrint.sTarget.GetLength(),NULL);
//下边
dcPrinter.ExtTextOut(805,805,ETO_CLIPPED,NULL,itemPrint.sReportDate,itemPrint.sReportDate.GetLength(),NULL);
dcPrinter.ExtTextOut(1300,805,ETO_CLIPPED,NULL,itemPrint.sCheckDoc,itemPrint.sCheckDoc.GetLength(),NULL);
dcPrinter.ExtTextOut(1800,805,ETO_CLIPPED,NULL,itemPrint.sCheckUpDoc,itemPrint.sCheckUpDoc.GetLength(),NULL);
dcPrinter.SelectObject(pOldFont);
newFont1.DeleteObject();
//上线
CPen newPB(PS_SOLID,5,RGB(0,255,0));
CPen* pOldPb = dcPrinter.SelectObject(&newPB);
dcPrinter.MoveTo(120,300);
dcPrinter.LineTo(2400,300);
dcPrinter.SelectObject(pOldPb);
newPB.DeleteObject();
//竖线
CPen newPA(PS_SOLID,5,RGB(0,255,0));
pOldPb = dcPrinter.SelectObject(&newPA);
dcPrinter.MoveTo(800,300);
dcPrinter.LineTo(800,850);
dcPrinter.SelectObject(pOldPb);
newPB.DeleteObject();
//下线
CPen newPC(PS_SOLID,5,RGB(0,255,0));
pOldPb = dcPrinter.SelectObject(&newPC);
dcPrinter.MoveTo(800,800);
dcPrinter.LineTo(2400,800);
dcPrinter.SelectObject(pOldPb);
newPB.DeleteObject();
// //彩色线,变宽
// CPen newPen(PS_SOLID,10,RGB(0,255,0));
// CPen* pOldPen=dcPrinter.SelectObject(&newPen);
// dcPrinter.MoveTo(750,750);
// dcPrinter.LineTo(950,950);
// dcPrinter.SelectObject(pOldPen);
// newPen.DeleteObject();
//彩色打印矩形
// CBrush brush2(RGB(255,0,0));
// CRect rc(300,300,400,400);
// dcPrinter.FillRect(&rc,&brush2);
// brush2.DeleteObject();
dcPrinter.EndPage();
dcPrinter.EndDoc();
}
}
CDC::FromHandle(hdcPrinter)->DeleteDC();//非NULL才能释放
}
//CDC::FromHandle(hdcPrinter)->DeleteDC();//非NULL才能释放
// }
}
}
void CPrintTestDlgDlg::InitConstPrintStruct()
{
itemPrint.sTile = L"报告单";
//左边
itemPrint.sName = L"姓名:";
itemPrint.sSex = L"性别:";
itemPrint.sAge =L"年龄:";
itemPrint.sRemark = L"备注:";
//底下
itemPrint.sReportDate = L"报告日期";
//列表项目
itemPrint.sCode = L"编号";
itemPrint.sItemName = L"项目";
itemPrint.sResult = L"结果";
itemPrint.sUnit = L"单位";
itemPrint.sTarget = L"参考值";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -