你如何设置 TDirect2DCanvas.Pen.StrokeStyle?

问题描述

我一直在尝试修改 C++Builder 中 StrokeStyleTDirect2DCanvas.Pen

documentation 是关于财产的:

确定笔绘制线条的笔画样式。

使用 StrokeStyle 指定绘制线条的更复杂的样式。 StrokeStyle 接受一个提供一组方法的接口,每个方法返回一个特定的绘图选项。

文档没有给出示例。当我尝试将此属性设置为任何内容时,出现编译错误,提示“无法编写没有写入说明符的属性”(看起来此属性仅设置为读取 StrokeStyle;尽管文档似乎另有说明) ).

我的愿望是让线条以圆形末端呈现,而不是使用 TDirect2DCanvas 时似乎默认的平末端。有人知道如何实现吗?

我使用的是 C++Builder 10.2 和 clang 编译器。我正在尝试使用 TDirect2DCanvas 而不是常规的 TCanvas,因为它可以绘制抗锯齿线。

解决方法

文档具有误导性。 TDirect2DPen::StrokeStyle 属性确实是只读的,因为它表示由 TDirect2DPen 在内部创建的 current Direct2D ID2D1StrokeStyle 对象。 TDirect2DPen 不提供任何方式来自定义任何笔画设置除了它的dashStyle

影响 TDirect2DPen::StrokeStyle 的唯一方法是设置 TDirect2DPen::Style 属性。设置 Style 将释放当前的 ID2D1StrokeStyle,然后如果 Style 设置为一个值 psSolid,{{1} } 或 psClear 然后 psInsideFrame 将调用 ID2D1Factory::CreateStrokeStyle() 来创建一个新的 TDirect2DPen,为其指定以下属性:

  • startCap = D2D1_CAP_STYLE_FLAT
  • endCap = D2D1_CAP_STYLE_FLAT
  • dashCap = D2D1_CAP_STYLE_ROUND
  • lineJoin = D2D1_LINE_JOIN_ROUND
  • miterLimit = 10
  • dashStyle = 以下之一,取决于 ID2D1StrokeStyle
    • D2D1_DASH_STYLE_DASH
    • D2D1_DASH_STYLE_DOT
    • D2D1_DASH_STYLE_DASH_DOT
    • D2D1_DASH_STYLE_DASH_DOT_DOT
  • dashOffset = 0
  • 破折号 = 零
  • dashesCount = 0

此行为是硬编码的,无法更改。

因此,如果您想对 TDirect2DPen.Style 进行更多控制,则根本不能使用 StrokeStyle。您将不得不直接使用 Direct2D API。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...