【发布时间】:2011-01-15 11:07:27
【问题描述】:
我有一个只需要 HDC 的绘图功能。 但我需要展示将要打印的内容的精确缩放版本。
所以目前,我使用 CreateCompatibleDC() 与打印机 HDC 和 CreateCompatibleBitmap() 与打印机的 HDC。
我认为这样 DC 将具有打印机的确切宽度和高度。 当我在这个 HDC 中选择字体时,文本将完全按照打印机的比例缩放。
不幸的是,我无法通过 StretchBlt() 将此 HDC 的像素复制到控件的 HDC,因为我猜它们属于不同的 HDC 类型。
如果我从具有与打印机页面相同的 w,h 的窗口 HDC 创建“内存画布”, 字体很小,因为它们是针对屏幕而不是页面缩放的...
我应该从窗口的 DC 和 CreateCompatibleDC() 来自打印机 DC 的 CreateCompatibleBitmap() 之类的??
如果有人可以解释这样做的正确方法。 (并且仍然有一些看起来与打印机上完全相同的东西)......
好吧,我会很感激的!!
...史蒂夫
【问题讨论】:
-
我对自己决定的路线并不感到骄傲...:/ 获取打印机 DC 信息 - 宽度、高度和 logpixelsy。 CreateCompatibleDC,来自打印预览窗口 DC 的位图,但具有打印机的宽度、高度(mondo 大小的内存杀死位图)当我 CreateFont 时,我使用 -::MulDiv (point, logPxlY, 72) 作为高度(使用来自打印机 dc 的 logPxlY)。太棒了,我希望重新审视这个不是非常理想的解决方案,但我还有其他功能要先添加......:/ pianocheater.com fyi :)
-
啊!!这不是一个好的解决方案(我不引以为豪的解决方案)。在我的具有 4 Gigs RAM 的 Vista 机器上,我无法使用 w,h 打印机创建屏幕兼容位图的 CompatibleBitmap - 内存不足 - 可能是显卡内存量,因为我确信它适合 4 gigs常规记忆。回到绘图板...
-
我知道这是不久前的事了,但你有没有试过从打印机兼容的 DC 创建位图,然后取消选择它并将其选择到新的屏幕兼容 DC 中用于 StretchBlt?此外,您可以将位图的尺寸和坐标除以 2 以使其适合而不会有太多失真的风险。
-
我很惭愧地说我就这样,最终买了一台显卡更好的电脑,问题就消失了(对我来说:)这是一个免费软件应用程序,所以我不感到内疚。我将更新打印,但它不会有打印预览......它在屏幕上看起来已经相同了。 (这是一些音乐符号。)
标签: c++ windows winapi gdi print-preview