使用自定义笔式在win32 / GDI中绘制线条?

时间:2010-01-04 21:01:41

标签: windows graphics winapi gdi

我需要使用win32 / GDI(Native,而不是.NET)进行绘图,我遇到了以下问题:

我需要绘制“样式化”的行。例如,在附图中,标记为“A”的线就我的应用数据而言是一条直线,它只需要用附加的锯齿形作为样式绘制。当然,这很容易以编程方式进行,但是当线可以处于任何角度(“B”)或甚至是贝塞尔曲线(“C”)时,它会变得更加复杂。

现在,我可以通过编程方式完成所有这些操作,精心设计数学,在每条线路周围放置一个曲折的可能性,但这将花费大量时间,更重要的是,相当容易出错。

是否可以只为窗口/ GDI提供一个“样式”来应用于该行,也许是一个像标记为“D”的位图,并让它用作笔来绘制线条?如果不是,那么为每个“样式”线写一堆特定的绘图代码是否有更灵活,更不易出错的方法呢?

*显然第一次定时器无法发布图像。可以在http://i.imgur.com/IC0T2.png

找到示例

4 个答案:

答案 0 :(得分:3)

这在Win32 GDI中是不可能的。你需要自己做数学。

但是应该注意,你可以获得用于构成线或曲线的点,这将使它变得更加容易。

请参阅此“Hit-Testing”教程以获取示例。

对于贝塞尔曲线,您可以使用Path Functions

对于直线,您可以使用:

LineDDA

答案 1 :(得分:2)

据我所知,GDI或GDI +中没有任何内容可以支持这一点。您拥有的唯一线路选项是仪表板图案,复合笔,仪表板盖,端盖和填充刷。

然而,这不应该太难。当然,它需要一天左右的时间,但你要做的就是写一条直线和贝塞尔插值器,将曲线分成相等的段,找到所有这些段的切线并左右交替。你最终会得到一个点阵列,可以很快地绘制成折线。

答案 2 :(得分:1)

没有什么可以自动完成的。你必须写一些代码。您可能希望查看GDI中的LineDDA API。它可能会简化代码所需的数学运算。

答案 3 :(得分:0)

ExtCreatePen(),也许?我不知道它是否支持zigzagging ...