1

MSDN文档(有些)清楚地说明了有关 GDI Pen 的以下两个事实:

  1. 化妆笔(通过 CreatePen 或 ExtCreatePen w/ PS_COSMETIC 创建)必须为 1 个单位宽(嗯,<= 1,但我们不要去那里)。

  2. 几何 (ExtCreatePen w/ PS_GEOMETRIC) 笔必须是实心的(仅限 PS_SOLID,无 PS_DASH 等)。然而,它们可以画出更粗的线条。 这在我上面的链接中清楚地记录为只有 9 倍的限制(我很愚蠢)。为了我的辩护,我的代码中的(坏的)评论和(破碎的)逻辑让我不相信。其他一些谷歌搜索的文章一定是只针对 Windows 9x 编写的。

为什么我可以违反这些规则并让 GDI 愉快地用这些笔画画?

我可以创建胖(例如宽度 = 10)化妆笔虚线几何笔。哎呀,我可以创建一个粗大的虚线几何笔!

这些笔似乎通常可以正常工作。我看到的唯一问题是在折线中,当我通过非常大的点数组时 - 它渲染线条的速度非常慢。但是,Polyline 通常对大型阵列的行为很奇怪 - 它与笔的行为不同。(我的其他折线问题可能是另一个问题......)

使用宽化妆笔或带有图案的宽几何笔是否安全?

4

1 回答 1

1

一般来说,您应该遵守记录在案的 API,否则您可能会依赖操作系统版本的特定行为。

您描述的ExtCreatePen限制(例如,不PS_DASHPS_GEOMETRIC)仅适用于 Win9x,不适用于 WinNT,因此在 NT/2000/XP 上,您的“粗虚线几何笔”应该不是问题。另请注意,Polyline对 Win9x 有一些限制。

如果您想要虚线,我建议PS_USERSTYLE您使用它来控制虚线和间隙的长度,而不是依赖于默认值PS_DASH

于 2008-10-30T22:04:45.127 回答