在microsoftvisualc++中(非托管代码)如何打印PNG到打印机

In Microsoft Visual C++ (not managed code) how to print a PNG to the printer?

本文关键字:打印 打印机 PNG microsoftvisualc++ 非托管代码 何打印      更新时间:2023-10-16

我想做的事情似乎简单而直接,我希望从Microsoft Visual c++(非托管代码)打印一个PNG文件到打印机。

由于这个问题几乎没有任何研究努力,所以我将把它当作一个家庭作业问题,并提供正确方向的指点,而不是完整的解决方案& help;

如果你已经熟悉Windows编程*,你肯定知道所有的图形操作都涉及到绘制或以其他方式操纵设备上下文。这就是Windows如何抽象出不同类型/品牌输出设备之间的无数差异,并允许程序员为所有这些设备编写相同的代码。有屏幕(即显示器)的设备上下文,也有打印机的设备上下文。如果你在屏幕上画了东西,你已经使用了屏幕设备上下文。打印机设备上下文的工作方式大致相同。

因此,您的第一项业务是创建/获取打印机设备上下文。我之前链接到的文档应该可以让你开始,但如果你找不到它,你想要的链接是这个。

一旦你有了打印机设备上下文,你只需要把你想要的东西画进去。这可以是文本或图形—在您的示例中是PNG图像。与位图(BMP)相比,使用PNG会变得更加困难,因为GDI本身不支持PNG。这个问题和许多其他问题在这里和网络上更详细地讨论了这个话题。不过,为了节省大量的阅读时间,简单的答案是您需要使用GDI+而不是GDI。这方面的文档从这里开始。它有一个很好的c++ API,但它也可以从C中使用。它至少可以追溯到Windows 2000,尽管在那些旧版本上它确实需要一个可重新分发的DLL。

使用GDI+,你将使用两个主要类:Graphics类(封装设备上下文)和Image类(表示图像,包括png)。一旦你创建了一个图形对象来表示你的设备上下文,并从你的图像创建了一个图像对象,你将调用你的图形对象的DrawImage实例方法来进行实际的绘图。

我想你也会发现以下两篇入门文章很有用:

  • 如何检索打印机设备上下文
  • 如何:从Windows程序打印

请记住,如果您在编写代码时遇到任何特定的问题,请提出一个新的问题,详细解释您所尝试的内容(最好显示一点示例代码)。

*如果没有,那么您有相当多的工作要做。我建议买一本详细解释的书。通过阅读Stack Overflow的答案来学习Windows编程是相当困难的。