【问题标题】:GDI polyline partial output when printing打印时 GDI 折线部分输出
【发布时间】:2011-02-03 10:22:17
【问题描述】:

我在打印输出时调用 Win32 GDI Polyline() 时看到一个奇怪的问题。在屏幕上看起来一切正常,但是如果打印它会在遇到大值时停止折线。我认为这种差异是由于打印产生更大的 POINT 值的缩放。

如果折线达到 > 32767 的值,就好像折线停止绘制,即,好像 POINT 值有 16 位限制。

我在网上看到了一些关于 16 位值的传闻,但没有明确的推理。在考虑可能的解决方案之前,我想先弄清楚为什么会发生这种情况。

【问题讨论】:

    标签: c++ winapi gdi


    【解决方案1】:

    根据 MS 文档,这将发生在 Windows 9X 中,其中坐标是 32 位,但底层实现是 16 位,并且值被截断。实际上,几年前我在非 9X Windows 版本中已经遇到了同样的问题,但我相信情况与你的情况有点不同。我的“大”坐标不存在,因为 DC 分辨率很高,但因为我的线条一端在屏幕内,另一端在屏幕外很远 - 行为是可见部分不会拦截屏幕边缘正确的点。就我而言,我通过在绘制之前剪断线条来解决问题。 也许您的问题是您正在使用的特定打印机驱动程序中的错误,您是否尝试过使用另一个?

    http://books.google.com/books?id=-O92IIF1Bj4C&lpg=PA359&ots=Sw0FC-9lk7&dq=gdi%2016%20bit%20coordinates&pg=PA359#v=onepage&q=gdi%2016%20bit%20coordinates&f=false

    【讨论】:

    • 实际上你所描述的问题正是我正在做的。我正在画一个实际上不在屏幕上的点。使用屏幕分辨率时,它低于 16 位边界,但打印时不是。我将在显示/打印之前剪裁该区域 - 我继承的代码;)
    【解决方案2】:

    是的,旧的 16 位 Windows 3.x 坐标最大值仍然分布在不明显的地方。在这种情况下,它很可能是您的打印机驱动程序。如果驱动程序升级无法解决问题,您只能自己缩放折线。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多