//属性情報の印刷
void CAttriPrintDlg::PrintData()
{
// Create and show the PrintDialog
CPrintDialog dlg(TRUE, PD_ALLPAGES|PD_ALLPAGES|PD_NOPAGENUMS, NULL);
if(dlg.DoModal() == IDCANCEL)
return;
// create a CDC and attach it to the default printer
CDC dcPrinter;
dcPrinter.Attach(dlg.CreatePrinterDC());
PRINTDLG *pPrintDlg = &dlg.m_pd;
AfxGetApp()->GetPrinterDeviceDefaults(pPrintDlg);
DEVMODE* lpDevMode = (DEVMODE*)::GlobalLock(pPrintDlg->hDevMode);
::GlobalUnlock(pPrintDlg->hDevMode);
lpDevMode->dmPaperSize = DMPAPER_A4; //A4 297 x 420 mm
lpDevMode->dmOrientation = DMORIENT_LANDSCAPE; //橫向
// call StartDoc() to begin printing
DOCINFO docinfo;
//Sets the first sizeof(docinfo) chars of docinfo to the 0.
memset(&docinfo, 0, sizeof(docinfo));
docinfo.cbSize = sizeof(docinfo);
docinfo.lpszDocName = _T("判読領域属性情報印刷");
// ask for the measurements
int paperHeight1 = dcPrinter.GetDeviceCaps(VERTRES);
CPrintHelper helper;
//要打印的表格内容高度
int textHeight = paperHeight1 - helper.GetHeaderHeight() - helper.GetFootHeight();
//the number of rows of m_Grid in a page
int linePerPage = textHeight/helper.GetLineHeight(dcPrinter);
//the number of rows of m_Grid
int lineNumber = (int)helper.GetLineHeight(dcPrinter) * m_Grid.GetRows();
//頁數
int pageNumber = lineNumber/textHeight + 1;
//第一行
int line = 1;
//第一頁
int page = 1;
// if it fails, complain and exit gracefully
if (dcPrinter.StartDoc(&docinfo) < 0)
{
MessageBox(_T("プリンタは初期化できません"));
return;
}
while (page <= pageNumber)
{
// start a page
if (dcPrinter.StartPage() < 0)
{
MessageBox(_T("ページ処理は開始できません"));
dcPrinter.AbortDoc();
return;
}
//頁眉的打印
helper.DrawHeader(dcPrinter, strTitleText.c_str(), _startYear, _startImage , _endYear, _endImage);
helper.PrintPage(dcPrinter, m_Grid, line, linePerPage);
helper.DrawFoot(dcPrinter, page, pageNumber);
++page;
line += linePerPage;
linePerPage += linePerPage;
dcPrinter.EndPage();
}
dcPrinter.EndDoc();
}
本文介绍了一个使用C++实现的属性信息打印功能,通过创建并显示打印对话框,连接默认打印机,设置纸张大小为A4及横向方向,利用StartDoc()开始打印作业,并通过循环逐页打印表格内容。
2235

被折叠的 条评论
为什么被折叠?



