微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我需要使用win32 / GDI(Native,不是.NET)做一些绘图,并且遇到以下问题:

我需要画出“风格”的线条。 例如,在附图中,就我的应用数据而言,标记为“A”的线条是一条直线,只需要以附加的曲折作为样式来绘制即可。 当然,这很容易在编程上做,但是当线可以处于任何angular度(“B”)或者甚至是贝塞尔曲线(“C”)时变得更加复杂。

现在,我可以用编程的方式来完成这个任务,辛苦地做math运算,把每条线的可能性都设置成一个曲折的曲线,但这需要花费很多时间,更重要的是比较容易出错。

是否有可能给窗口/ GDI一个“样式”应用于行,也许是一个像“D”标记的位图,并使用它作为一个笔画线? 如果没有,比起为每个“样式”行编写一堆特定的绘图代码,是否还有一个更灵活,更容易出错的方法呢?

Windows API:简单窗口不能正确重画

有没有办法将窗口redirect(渲染)到“内存显示”?

为什么在垂直方向字体大小不同

逻辑单元到设备单元

用GDI在我的窗口周围绘制边框不起作用?

*显然,第一次定时器不能发布图像。 例子可以在http://img.zgserver.com/windows/IC0T2.pngfind

C ++ GDI +在透明的分层窗口上绘制文本

gdi对象被保存在哪里?

如何find使用DrawText在Windows中呈现的文本的EXACT像素高度

WIC“复制像素”调用之后的倍乘像素

C和Windows GDI中的双缓冲*框架*

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

但是应该注意的是,你可以获得用于弥补线条或曲线的点,这应该使其更容易。

查看这个“命中测试”教程的例子。

http://msdn.microsoft.com/en-us/library/ms969920.aspx

对于贝塞尔曲线,您可以使用路径函数

beginPath方法

polyBezier

Endpath

FlattenPath

对于直线,你可以使用:

LineDDA

据我所知,GDI甚至GDI +都不支持这一点。 您唯一的选项是短划线,复合笔,破折号帽,端盖和填充笔。

你也许可以利用这些函数中的一个来绘制类似于你的直线样条曲线的东西,但是对于曲线样条曲线肯定是不行的。

但是,这样做不应该太难。 当然,这将需要一天左右的时间,但所有你需要做的是写一个线和贝塞尔插值器,将曲线分成相等的部分,找到所有这些部分的切线和左右替代。 你将会得到一系列可以非常快速地绘制成折线的点。

没有什么会自动做到这一点。 你将不得不写一些代码。 您可能需要查看GDI中的LineDDA API。 它可能会简化你的代码将需要的数学。

ExtCreatePen(),也许? 我不知道如果它支持曲折…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐