你如何设置TDirect2DCanvas.Pen.StrokeStyle?

How do you set the TDirect2DCanvas.Pen.StrokeStyle?

我一直在尝试为 C++Builder 中的 TDirect2DCanvas.Pen 修改 StrokeStyle

documentation 关于 属性 的说法:

Determines the stroke style in which the pen draws lines.

Use StrokeStyle to specify a more complex style in which the lines are drawn. StrokeStyle accepts an interface that provides a set of methods, each returning a certain drawing option.

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

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

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

文档具有误导性。 TDirect2DPen::StrokeStyle property is indeed read-only, as it represents the current Direct2D ID2D1StrokeStyle 对象,由 TDirect2DPen 内部创建。 TDirect2DPen 不提供 任何 自定义任何笔画设置的方式 除了 它的 dashStyle.

影响 TDirect2DPen::StrokeStyle 的唯一方法是设置 TDirect2DPen::Style property. Setting the Style will release the current ID2D1StrokeStyle, and then if the Style is set to a value other than psSolid, psClear, or psInsideFrame then TDirect2DPen will call ID2D1Factory::CreateStrokeStyle() 以创建新的 ID2D1StrokeStyle,并为其指定以下属性:

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

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

所以,如果你想更多地控制 StrokeStyle,你根本不能使用 TDirect2DCanvas。您将不得不直接使用 Direct2D API。