Visual C++ 6.0编程实现打印功能

Visual C++6.0是开发Windows应用程序的强大工具,但是要通过它实现程序的打印功能, 一直是初学者的一个难点,经常有朋友询问如何在VC中实现打印功能,他们往往感到在MFC提 供的框架内实现这个问题很复杂,不知道如何下手。本例针对这个问题,介绍一种简单的方 法实现文字串的打印功能,读者朋友可以在此基础上稍微改动一下,就可以实现文件、图像的 打印功能。

一、实现方法

在Windows操作系统下,显示器、打印机和绘图仪都 被视为输出设备,正常情况下,系统默认的输出设备是显示器。要使用打印机,首先需要创建 一个指向打印机的设备环境句柄,然后通过该句柄调用相关的绘图函数把所需的文字和图形输 出至打印机上。当打印结束后,删除这个设备环境句柄即可。

当Windows系统中安装好 打印机后,系统总是自动设置一个打印机为系统的默认打印机,在Windows的启动配置文件 Win.ini中的[window]段中列出了带有关键字device的默认打印机。下面是某一机器中 Win.ini中的[Windows]字段的内容:

[windows]
load=
run=
NullPort=None
device=HP LaserJet 4050 (computer000),HPBFDB1,LPT1

 

在上述关键字device后的字符串中,包含了系 统中默认打印机的三个重要属性,它们依次是打印机的设备名HP LaserJet 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为字段中的 关键字名;lpDefault为默认的字符串;lpReturnedString为检索到的字符串,如果该函数没 有从lpKeyName关键字中检索到相应的字符串,则kpRetrunedString返回默认字符串 lpDefault;nSize为返回字符串的长度。

获取上述字符串后,再使用strtok()函数 将该字符串进行分解,获得与打印机相关的三个属性,作为API函数CreateDC()创建打印机设 备环境句柄的参数,CreateDC()函数如果调用成功,则为默认打印机创建一个设备环境句柄 ,否则返回一个空值(NULL)。该函数的原形为:HDC CreateDC(LPCTSTR lpszDriver,LPCTSTR lpszDevice,LPCTSTR lpszOutput,CONST DEVMODE *lpinitData)。该函数的前三个参数恰好 对应打印机的三个属性,最后一个参数为初始化打印机驱动程序的数据,一般情况下该参数 设置为NULL就可以了。

在具体打印的过程中,调用int StartDoc( HDC hdc, CONST DOCINFO *lpdi )函数来开始一个打印任务,其中参数lpdi为一个指向DOCINFO结构的指针, 该结构如下:

typedef struct {
 int cbSize; //结构的尺寸大小;
 LPCTSTR lpszDocName; //文档的名字;
 LPCTSTR lpszOutput; //输出文档名, 一般情况下为NULL;
 LPCTSTR lpszDatatype;//用来记录打印过程的数据类型,一般 情况下为NULL;
 DWORD fwType; //用来支持打印工作的额外信息,一般情况下为 NULL;
} DOCINFO, *LPDOCINFO;

开始一个打印任务后,再调用StartPage (hdcprint)函数让打印机走纸,通知打印机有文档将要打印;接下来的工作就是输出数据了 ,这部分工作对于开发人员来说就象往计算机屏幕上输出文字、图像一样容易,只不过是计 算机根据当前的设备环境句柄自动将数据输出到打印机罢了。数据打印完后,需要作一些善 后处理工作,使用RestoreDC(hdcprint,-1)函数恢复打印机设备句柄、EndPage(hdcprint)函 数让打印机停止打印,最后调用EndDoc(hdcprint)函数结束上述的打印作业。

时间: 2024-11-02 10:21:42

Visual C++ 6.0编程实现打印功能的相关文章

111_《数据管理COOL-Delphi 4.0 + Visual FoxPro 6.0》

<数据管理COOL-Delphi 4.0 + Visual FoxPro 6.0> Delphi 教程 系列书籍 (111) <数据管理COOL-Delphi 4.0 + Visual FoxPro 6.0> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: 下载 原书名: 数据管理COOL-DELPHI4.0+VISUAL FOXPRO6.0 作者: 王永信 王益进 肖阳 出版社: 北京希望电子出版社 书号: 7900024247 出版日期:1999年8月

Visual Basic 6.0 控件和 .NET 控件的区别

visual|控件|区别 Visual Basic 6.0 控件和 .NET 控件的区别 摘要:本文简单介绍了 Microsoft Visual Basic 6.0 中的标准控件和等效的 Microsoft .NET 控件. 目标 了解哪些 Visual Basic 6.0 ActiveX 控件在 .NET 中具有等效控件. 了解 .NET 控件中哪些属性发生了变化. 了解 .NET 中有哪些新控件. 前提条件 要彻底理解本文内容,需要满足以下条件: 了解什么是 ActiveX 控件. 使用 V

使用Visual Basic 9.0进行XML编程

到目前为止,您可能已听说过LINQ(语言集成查询),它是Visual Studio 2008中附带的新查询技术.启用LINQ的语言(如Visual Basic)为您提供了一组丰富的查询运算符,您可以将这些运算符应用到各种数据源,如内存中的集合.数据库.数据集和XML.仅这一项技术就已经非常优秀了,但Visual Basic 9.0实际上提供的技术远不止此,它使XML成为直接集成到语言中的一流数据类型. 现在您可能想知道为什么需要将 XML 数据类型直接集成到Visual Basic中.当今,许多

Visual Basic .NET 已不再支持的 Visual Basic 6.0 功能

visual Visual Basic .NET 已不再支持下列的 Visual Basic 6.0 功能.A: ·    OLE 容器控件   Visual Basic .NET 中没有对等的对象.依赖这个控件的应用程序应继续使用 Visual Basic 6.0. ·    动态资料交换 (DDE)   DDE 方法不再受到支持.依赖 DDE 的应用程序应该修改为使用其它的应用程序间通讯方法或继续使用 Visual Basic 6.0. ·    DAO 或 RDO 资料系结 (Data B

Visual C#的Excel编程

Excel是微软公司办公自动化套件中的一个软件,他主要是用来处理电子表格.Excel以其功能强大,界面友好等受到了许多用户的欢迎.在办公的时候,正是由于Excel的这么多的优点,许多重要的数据,往往以Excel电子表格的形式存储起来.这样就给程序员带来了一个问题,虽然Excel功能比较强大,但毕竟不是数据库,在程序中处理数据库中的数据比其处理Excel表格中的数据容易许多.那么如何用Visual C#读取Excel表格中的数据?在以前用Delphi编程的时候,对于不同的用户,他们对于打印的需求是

《Visual C++ 开发从入门到精通》——1.2 Visual C++ 6.0开发环境

1.2 Visual C++ 6.0开发环境 知识点讲解:光盘\视频\PPT讲解(知识点)\第1章\Visual C++ 6.0开发环境介绍.mp4 学习任何一门程序语言,都需要遵循图1-12所示的过程.本节将介绍Visual C++ 6.0集成开发环境的基本知识. 图1-12 学习一门语言的过程 1.2.1 熟悉集成开发环境 在打开Visual C++ 6.0后,需要熟悉Visual C++ 6.0这个集成开发环境.首先从Windows操作系统中选择"开始"→"程序&quo

实现Internet/Intranet 所见即所得的打印功能

打印  实现Internet/Intranet 所见即所得的打印功能        随着Internet技术的飞速发展,越来越多的企业应用是基于Internet/Intranet.这样用户就可以通过浏览器(Browser)来完成各种数据的输入.查询功能.但由于目前浏览器的局限性,影响了它的一些应用.如HTML页面交互性不强.缺乏所见即所得的打印功能等.这些问题多是通过在网页中嵌入Java Applet.ActiveX等控件或是使用Plug-in来解决.本文介绍一种解决所见即所得的打印方案 一.浏

用Visual Basic 6.0实现自动化测试

visual 摘要:本文探讨了Visual Basic 6.0在测试自动化中应用的可能性,并列举了一些在实际工作中应用的例子 一 现有自动化测试工具的不足 当前,一个摆在软件测试自动化面前的一个很明显的事实是目前可用的工具并不能做一切我们想要它们做的事情:指望任何一种工具能够完全支持众多不同应用的测试自动化是不现实的.由于很难找到一个能完全满足测试自动化需要的测试工具,而且测试自动化工具都十分昂贵,所以常用的做法是使用一种主要的自动化测试工具,然后用传统的编程语言如Java, C++ 和 Vis

visual foxpro 7.0漫谈

今年是开发工具集中更新版本的一年:微软的Visual Studio.Net,Borland 的Delphi 6.Sybase的Power Builder 8都相继推出正式版或是测试版,我们的Visual FoxPro 当然也不会放过这业界大比武的好时机,今年5月微软发布了Visual FoxPro 7,它是继1995年Fox家族第一个可视化成员Visual FoxPro 3以来最具革命意义的版本. "革命意义"这个词可不是我信口开河.随便使用的,这是国外的Fox社区对Visual Fo