- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用MFC实现打印功能
使用MFC实现打印功能如果程序不是文档视图结构的,我们要使用MFC来进行打印,可以通过建立一个虚拟的文档视图结构来进行打印。MFC的打印的强大功能是在CView里提供的,而CView类的对象是一个子窗口,它必须是某一个框架窗口的子窗口,而在对话框程序中,我们只需要打印,而不需要显示这个框架窗口和视图。我们以按下按钮打印来执行打印程序,例如按钮为ID为IDC_PNT,消息相应函数为OnPnt(),即:ON_BN_CLICKED(IDC_PNT, OnPnt); 需要在OnPnt中建立一个框架窗口,同时使某个CView类的对象为该窗口的子窗口。因此需要建立两个类,一个为框架窗口类CPrintFrame,另一个为CPrintView。在新建一个用于打印的虚拟框架窗口时,需要将执行打印的对话框的指针传给框架窗口,这以便在对话框来响应WM_BEGIN_PRINTING和WM_END_PRINTING消息,使对话框可以完成打印的初始化和释放操作。在执行一个打印任务时,将打印的流程交给CView来进行,而这个CView是虚拟的,只是用来完成打印一些操作,其它内容则完全不负责处理,而当要执行CView::OnPrint时,则又将处理的具体内容传回到对话框,而对话框则只需要响应WM_MY_PRINT消息即可:pFrame-m_pCallerDlg-SendMessage(WM_MY_PRINT,(WPARAM) pDC, (LPARAM) pInfo); 使打印的具体处理又传回到对话框中,使开发人员根据具体的需要写WM_MY_PRINT的处理函数就可以实现打印,而CView::OnPrint(CDC* pDC, CPrintInfo* pInfo)的参数也从WM_MY_PRINT的消息参数传出来,在用户的对话框程序中,需要写的代码就很少,主要有以下几个步骤:建立一个CPrintFrame的对象,设该对象的指针为pFrame,并将对话框的指针传给该对象的m_pCallerDlg,即pFrame-m_pCallerDlg = this;调用对象的Create函数创建框架窗口;例如pFrame-Create(NULL,频谱打印,WS_OVERLAPPEDWINDOW,CRect(0,0,0,0));如果要执行打印,则调用pFrame-m_pView-OnMyPrint();如果要执行打印预览,则调用:pFrame-m_pView-OnMyPrintPreview();例如:void CDlgPrintDlg::OnPrint() //执行打印功能{CPrintFrame *pFrame = new CPrintFrame;pFrame-m_pCallerDlg = this;pFrame-Create(NULL,Curve Print,WS_OVERLAPPEDWINDOW,CRect(0,0,0,0));pFrame-m_pView-OnMyPrint();}void CDlgPrintDlg::OnPrintPreview() //执行打印预览功能{CPrintFrame *pFrame = new CPrintFrame;pFrame-m_pCallerDlg = this;pFrame-Create(NULL,Curve Print Preview,WS_OVERLAPPEDWINDOW,CRect(0,0,0,0));pFrame-m_pView-OnMyPrintPreview();}在对话框中响应 WM_BEGIN_PRINTING, WM_END_PRINTING,WM_MY_PRINT消息,分别完成打印的初始化、释放和具体的打印操作?框架实现了对打印的一些底层支持,直接的打印机制是通过函数StartDoc和EndDoc()来实现的。应用程序要使用打印机时,它首先使用CreateDC或PrintDlg来获取指向打印机设备环境的一个句柄,这就使得打印机设备驱动程序库模块被加载到内存(如果还没有加载到内存的话),并进行初始化。然后,程序调用StartDoc函数,通知一个新文档开始了。StartDoc函数是由GDI模块来处理的。GDI模块调用打印机设备驱动程序中的control函数告诉打印机准备打印。???打印一个文档的过程以StartDoc调用开始,以EndDoc调用结束。调用StartPage来开始一页,调用EndPage来结束该页。?? 下面这段代码在对话框中实现了对打印的支持。 /* GetPrinterDC 获取设备环境的句柄。 HDC GetPrinterDC()const; 返回值:如果成功则返回一个打印机设备环境的句柄;否则返回null. 说明:如果CPrintDialog构造函数的参数bPrintSetupOnly是FAL
文档评论(0)