如何在win32 c ++中打印预览?

时间:2010-02-10 20:49:34

标签: c++ windows winapi gdi print-preview

我有一个只需要HDC的绘图功能。 但我需要展示一个打印出来的精确缩放版本。

目前,我使用 CreateCompatibleDC()与打印机HDC和 使用打印机的HDC创建CompatibleBitmap()。

我想这样DC会有打印机的确切宽度和高度。 当我在这个HDC中选择字体时,文本将与打印机完全一样缩放。

不幸的是,我不能让StretchBlt()将这个HDC的像素复制到控件的HDC,因为我猜它们是不同的HDC类型。

如果我从具有与打印机页面相同的w,h的HDC窗口创建“内存画布”, 字体很明显,因为它们是为屏幕缩放而不是页面......

我应该从窗口的DC和中创建CompatibleDC() CreateCompatibleBitmap()来自打印机的DC还是什么?

如果有人可以解释这样做的正确方法。 (并且仍然有一些看起来像在打印机上一样的东西)......

好吧,我很感激!!

...史蒂夫

3 个答案:

答案 0 :(得分:10)

答案 1 :(得分:3)

可能值得尝试的一件事是创建增强的图元文件DC,正常绘制它,然后使用打印机指标缩放此图元文件。这是WTL BmpView示例使用的方法 - 我不知道它有多准确但是值得一看(将相关类移植到Win32应该很容易,但WTL是一个很好的替代品对于Win32编程,所以可能值得使用。)

答案 2 :(得分:2)

它看起来不一样,因为你在打印机DC中有更高的分辨率,所以你必须编写各种转换函数。我会选择你需要工作的方法,但是文本太小,只是将每个位置/字体大小乘以打印机窗口宽度并除以源窗口宽度。