《2022年打印机编程 .pdf》由会员分享,可在线阅读,更多相关《2022年打印机编程 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Visual C+6.0是开发 Windows 应用程序的强大工具,但是要通过它实现程序的打印功能,一直是初学者的一个难点,经常有朋友询问如何在VC中实现打印功能,他们往往感到在MFC提供的框架内实现这个问题很复杂,不知道如何下手。本例针对这个问题,介绍一种简单的方法实现文字串的打印功能,读者朋友可以在此基础上稍微改动一下,就可以实现文件、图像的打印功能。一、实现方法在 Windows 操作系统下,显示器、打印机和绘图仪都被视为输出设备,正常情况下,系统默认的输出设备是显示器。要使用打印机,首先需要创建一个指向打印机的设备环境句柄,然后通过该句柄调用相关的绘图函数把所需的文字和图形输出至打印机
2、上。当打印结束后,删除这个设备环境句柄即可。当 Windows 系统中安装好打印机后,系统总是自动设置一个打印机为系统的默认打印机,在Windows 的启动配置文件Win.ini 中的 window 段中列出了带有关键字device 的默认打印机。下面是某一机器中 Win.ini 中的Windows 字段的内容:windows load=run=NullPort=None device=HP LaserJet 4050(computer000),HPBFDB1,LPT1 在上述关键字device 后的字符串中,包含了系统中默认打印机的三个重要属性,它们依次是打印机的设备名 HP LaserJe
3、t 4050(computer000),驱动程序名是HPBFDB1,输出端口为 LPT1。为了操纵系统默认的打印机,实现程序的打印功能,在程序中可调用API函数 GetProfileString()从 Win.ini 文件中获得device 这个设备字符串,该函数的原型为:DWORD GetProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefault,LPTSTR lpReturnedString,DWORD nSize)。函数中lpAppName 参数为所要检索的Win.ini 文件中的字段名;lpKeyName 为字
4、段中的关键字名;lpDefault为默认的字符串;lpReturnedString 为检索到的字符串,如果该函数没有从lpKeyName 关键字中检索到相应的字符串,则kpRetrunedString 返回默认字符串lpDefault;nSize为返回字符串的长度。获取上述字符串后,再使用strtok()函数将该字符串进行分解,获得与打印机相关的三个属性,作为 API函数 CreateDC()创建打印机设备环境句柄的参数,CreateDC()函数如果调用成功,则为默认打印机创建一个设备环境句柄,否则返回一个空值(NULL)。该函数的原形为:HDC CreateDC(LPCTSTR lpszDr
5、iver,LPCTSTR lpszDevice,LPCTSTR lpszOutput,CONST DEVMODE*lpinitData)。该函数的前三个参数恰好对应打印机的三个属性,最后一个参数为初始化打印机驱动程序的数据,一般情况下该参数设置为NULL就可以了。在具体打印的过程中,调用 int StartDoc(HDC hdc,CONST DOCINFO*lpdi)函数来开始一个打印任务,其中参数 lpdi 为一个指向 DOCINFO结构的指针,该结构如下:typedef struct int cbSize;/结构的尺寸大小;LPCTSTR lpszDocName;/文档的名字;名师资料总结
6、-精品资料欢迎下载-名师精心整理-第 1 页,共 3 页 -LPCTSTR lpszOutput;/输出文档名,一般情况下为NULL;LPCTSTR lpszDatatype;/用来记录打印过程的数据类型,一般情况下为NULL;DWORD fwType;/用来支持打印工作的额外信息,一般情况下为NULL;DOCINFO,*LPDOCINFO;开始一个打印任务后,再调用 StartPage(hdcprint)函数让打印机走纸,通知打印机有文档将要打印;接下来的工作就是输出数据了,这部分工作对于开发人员来说就象往计算机屏幕上输出文字、图像一样容易,只不过是计算机根据当前的设备环境句柄自动将数据输出
7、到打印机罢了。数据打印完后,需要作一些善后处理工作,使用 RestoreDC(hdcprint,-1)函数恢复打印机设备句柄、EndPage(hdcprint)函数让打印机停止打印,最后调用EndDoc(hdcprint)函数结束上述的打印作业。二、编程步骤1、启动 Visual C+6.0,新建一个基于对话框的应用程序Test,在程序的对话框窗体中加入一个按钮(Button),设置这个 Button 的属性:ID=IDC_PRINT,CAPTION=打印;2、使用 Class Wizard类向导为该按钮添加一个鼠标单击处理函数OnPrint()3、修改 TestDlg.cpp文件中的 OnP
8、rint()函数;4、添加代码,编译运行程序。三、程序代码/void CTestDlg:OnPrint()char szprinter80;char*szDevice,*szDriver,*szOutput;HDC hdcprint;/定义一个设备环境句柄/定义一个打印作业static DOCINFO di=sizeof(DOCINFO),printer,NULL;/得到设备字符串存入数组szprinter 中GetProfileString(windows,device,szprinter,80);/将设备字符串分解if(NULL!=(szDevice=strtok(szprinter,)&
9、NULL!=(szDriver=strtok(NULL,)&NULL!=(szOutput=strtok(NULL,)/创建一个打印机设备句柄if(hdcprint=CreateDC(szDriver,szDevice,szOutput,NULL)!=0)if(StartDoc(hdcprint,&di)0)/开始执行一个打印作业 StartPage(hdcprint);/打印机走纸,开始打印SaveDC(hdcprint);/保存打印机设备句柄/输出一行文字TextOut(hdcprint,1,1,热烈祝贺编程实例出版发行!,16);名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,
10、共 3 页 -RestoreDC(hdcprint,-1);/恢复打印机设备句柄EndPage(hdcprint);/打印机停纸,停止打印EndDoc(hdcprint);/结束一个打印作业MessageBox(打印完毕!,提示,MB_ICONINFORMATION);/用 API 函数 DeleteDC 销毁一个打印机设备句柄DeleteDC(hdcprint);else MessageBox(没有默认打印机,或者没有安装打印机!);return;四、小结上面的例子非常简单,笔者主要是通过它说明如何实现打印功能,而不是说明如何实现复杂的打印效果,因为它们已经不属于我们这里所要讨论的范畴了,相信读者朋友真正掌握了上面实现打印功能的方法后,通过灵活的设置设备环境的各种对象(如字体对象、画刷等),一定可以打印出各种满意的效果来。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 3 页 -