2

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

文档说明了该属性:

确定笔画线的笔触样式。

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

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

我的愿望是让线条呈现圆形末端,而不是使用TDirect2DCanvas. 有谁知道如何做到这一点?

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

4

1 回答 1

2

该文档具有误导性。该TDirect2DPen::StrokeStyle属性确实是只读的,因为它表示当前Direct2DID2D1StrokeStyle对象,由TDirect2DPen. TDirect2DPen不提供任何方式来自定义dashStyle.

影响的唯一方法TDirect2DPen::StrokeStyle是设置TDirect2DPen::Style属性。设置Style将释放当前的ID2D1StrokeStyle,然后如果设置为 ,以外Style的值,或者then将调用创建一个新的 ,为其指定以下属性: psSolidpsClearpsInsideFrameTDirect2DPenID2D1Factory::CreateStrokeStyle()ID2D1StrokeStyle

  • startCap = D2D1_CAP_STYLE_FLAT
  • endCap = D2D1_CAP_STYLE_FLAT
  • dashCap = D2D1_CAP_STYLE_ROUND
  • lineJoin = D2D1_LINE_JOIN_ROUND
  • 斜接限制 = 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。

于 2021-03-05T17:59:44.933 回答