打印时GDI折线部分输出

时间:2010-04-01 15:35:34

标签: c++ winapi gdi

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

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

我见过有人听过 - 在网上说过16位值,但没有明确的推理。我想在考虑潜在的解决方案之前找出原因。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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