【问题标题】:Issues with using unsupported Win32 GDI Pens modes?使用不受支持的 Win32 GDI 笔模式有问题吗?
【发布时间】:2010-09-20 02:00:42
【问题描述】:

MSDN documentation (有点)清楚地了解以下关于 GDI 笔的两个事实:

  1. 化妆笔(通过 CreatePen 或 ExtCreatePen w/ PS_COSMETIC 创建)必须为 1 unit 宽(嗯,

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

为什么我可以违反这些规则并让 GDI 愉快地使用这些笔进行绘图?

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

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

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

【问题讨论】:

    标签: windows winapi drawing gdi


    【解决方案1】:

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

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

    如果您想要虚线,我建议您使用PS_USERSTYLE,以便您控制虚线和间隙的长度,而不是依赖PS_DASH 为您提供的任何默认值。

    【讨论】:

    • 虽然我知道我应该遵守文档,但发布的代码已经不遵守规则了。我希望能深入了解为什么这会奏效——或者不会奏效(补丁需要多快发布)。但是,指出我的几何错误足以让我接受这一点!
    • 我的折线问题将是另一个问题 - 即使在现代版本的 Windows (Vista) 上,我也可以通过传递大型数组来使窗口崩溃...
    • @Aardvark - 恐怕我无法为您提供更多见解,我只是按照文档所说的进行。
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    相关资源
    最近更新 更多