- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在 VC 对话框中实现打印和打印预览(附实现步骤)
时间: 2008-01-27 作者: 佚名
在一般的软件开发中打印和打印预览是经常要用到的功能 ,对于VC6.0中的文档/视图(Doc/View)框架,可以很方便的使用缺省的打
印和打印预览。但是 , 如果应用程序是基于对话框的就没有办法利用这种便利。而很多情况下 , 基于对话框的程序也需要打印和打印预览
功能。那该怎么办呢 ?这正是本文将要解决的问题。
实现打印
在对话框应用程序中不具备 MFC勺视和框架交互,要想实现打印和打印预览必须直接获取打印机的设备环境句柄 ,这时可以设置
CPringDialog 类中的构造函数的参数 ,获取打印机的设备环境句柄。利用这个句柄 ,转换为指针,则按打印流程实现打印任务。
⑴从CFrameWn类派生出主窗口类 CMyFrameWn加入项目,这个类将作为控制类来实现程序的打印和打印预。
(2)在CMyFrameWn(中加入打印和打印预览相关的函数 ,为了方便起见,名字和CView视图类中缺省的打印和打印预览虚函数名相同。但 这些函数是以成员函数的形式加入的 , 而不是重载。这里主要介绍 Print 和 OnPrint 函数。
Print函数是打印控制函数,由它来弹出打印对话框,取得用户设置信息,如打印机、纸张大小等。还有建立一个打印机 DC和设置
DOCINF(结构,该结构包含输入输出文件名及其它一些信息 ,StartDoc函数要该结构作参数。还要设置打印区域,调用打印函数等
void CMyFrameWnd::Print()
{
CDCdc;
CPrintDialog printDlg(FALSE);
if (printDlg.DoModal() != IDOK)
// 弹出打印对话框 , 取得用户设置参数
return;
dc.Attach(printDlg.GetPrinterDC());
//绑定一个打印机 DC到CDC dc.m_bPrinting=TRUE;
DOCINFOdi; // 初始化打印机的 DOCINFO memset(di,0,sizeof (DOCINFO));
di.cbSize=sizeof (DOCINFO);
BOOLbPrintingOK=dc.StartDoc(di); // 开始一个打印任务
CPrintInfo Info;
Info.m_rectDraw.SetRect(0,0,dc.GetDeviceCaps(HORZRES), c.GetDeviceCaps(VERTRES));
// 设置打印区域大小
OnBeginPrinting(dc,Info); // 打印初始化
for (UINT page = Info. GetMinPage ( ); page = Info.
GetMaxPage() bPrintingOK; page++) dc.StartPage(); // 开始一个新的打印页
Info.m_nCurPage=page;
OnPrint(dc,Info); // 打印
bPrintingOK=(dc.EndPage() 0); // 打印页结束
OnEndPrinting(dc,Info); // 打印完成后释放资源
if (bPrintingOK) dc.EndDoc(); // 一个打印任务结束
else dc.AbortDoc(); // 终止打印任务
dc.Detach(); // 释放打印机 DC
, 具体如下 :OnPrint 函数主要设置映射参数
, 具体如下 :
void CMyFrameWnd::OnPrint(CDC *pDC,CPrintInfo *pInfo)// if (!pDC || !pInfo) return;
CFont *pOldFont=pDC-SelectObject(m_PrinterFont);
// 设置映射参数及边界
pDC-SetMapMode(MM_ANISOTROPIC);
pDC-SetWindowExt(m_LogicalPageSize);
pDC-SetViewportExt(m_PaperSize);
pDC-SetWindowOrg(-LEFT_MARGIN*m_CharSize.cx,0);
pDC-SelectObject(pOldFont);
实现打印预览
通过以上几个函数就已经可以打印了 ,要实现打印预览,还要作一些工作。因为打印预览函数的执行都依赖于 CView和CFrameWn框架,
所以 , 我们建立临时的框架类和视图类 , 然后调用这个临时视图类的缺省函数 OnFilePrint 和 OnFilePrintPreview 。
⑴从CView类派生出CMyView类加入项目。并在 CM
您可能关注的文档
- 国际酒店pa部操作程序pa-0022cleaningchemicals.docx
- 国际酒店前厅部sp-rm-fo-rec-a802postingguestcharges入帐.docx
- 国际酒店前厅部sp-rm-fo-rec-b205highbalancereport高额消费报告.docx
- 国际酒店pa部操作程序pa-0024stafflockercleaning.docx
- 国际酒店财务部操作程序5fa-13钥匙管理.docx
- 国际酒店前厅部sp-rm-fo-rec-a218turnaway婉拒服务service.docx
- 国际酒店财务部操作程序5fa-17财务总监交接记录.docx
- 国际酒店pa部操作程序pa-0023placingequipmentinthestoragearea.docx
- 国际酒店集团开业筹备工程部总工职责及员工组成.docx
- 国际金融(二)作业.docx
文档评论(0)