VC.Net里打印MsFlexGrid的内容

本文介绍了一个使用C++实现的属性信息打印功能,通过创建并显示打印对话框,连接默认打印机,设置纸张大小为A4及横向方向,利用StartDoc()开始打印作业,并通过循环逐页打印表格内容。

//属性情報の印刷
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();
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值