我想做的事情似乎简单直接,我希望从Microsoft Visual C++(非托管代码)打印到打印机的PNG文件.
由于问题很少或根本没有研究工作,我将把它视为一个家庭作业问题并提供正确方向的指示,而不是一个完整的解决方案......
如果您已经熟悉Windows编程*,您肯定知道所有图形操作都涉及绘制或操纵设备上下文.这就是Windows如何抽象出不同类型/品牌的输出设备之间的无数差异,并允许程序员为所有这些设备编写相同的代码.屏幕有设备上下文(即监视器),还有打印机的设备上下文.如果您在屏幕上绘制了任何内容,则您已经使用过屏幕设备上下文.打印机设备上下文的工作方式大致相同.
因此,您的第一个业务是创建/获取打印机设备上下文.我之前链接的文档可以帮助您入门,但是如果您找不到它,您想要的链接就是这个.
获得打印机设备上下文后,您只需要绘制任何内容即可.这可以是文本或图形 - 在您的情况下是PNG图像.由于GDI本身不支持PNG,因此使用PNG而不是比特图(BMP)会变得更加困难.这个问题以及网上其他地方的很多其他人都详细介绍了这个主题.但是,为了节省大量的阅读,简单的答案是你需要使用GDI +而不是GDI.该文档从此处开始.它有一个很好的C++ API,但它也可以从C使用.它可以作为(至少)Windows 2000工作,虽然在那些旧版本它确实需要一个可再发行的DLL.
使用GDI +,您将使用两个主要类:Graphics类(封装设备上下文)和Image类(表示图像,包括PNG).一旦创建了表示设备上下文的Graphics对象,并从图像中创建了Image对象,就可以调用Graphics对象的DrawImage实例方法来进行实际绘制.
我想你也会发现以下两篇有用的how-to文章:
如何:检索打印机设备上下文
如何:从Windows程序打印
请记住,如果您在尝试编写代码时遇到任何特定问题,请提出一个新问题,详细说明您尝试过的内容(最好显示一些示例代码).
*如果没有,你就会有很多工作要做.我建议购买一本能够彻底解释它的书.从阅读Stack Overflow答案中学习Windows编程相当困难.