如何绘制和填充基本形状

本主题介绍如何绘制基本形状。 ID2D1RenderTarget 接口提供用于大纲显示和填充省略号、矩形和线条的方法。 以下示例演示如何创建和绘制椭圆。

本主题包含以下各节:

使用实心笔划绘制椭圆的轮廓

若要绘制椭圆的轮廓,请定义画笔 (,例如 ID2D1SolidColorBrushID2D1LinearGradientBrush) 来绘制轮廓,以及描述椭圆的位置和维度的 D2D1_ELLIPSE ,然后将这些对象传递给 ID2D1RenderTarget::D rawEllipse 方法。 以下示例创建黑色纯色画笔并将其存储在m_spBlackBrush类成员中。

hr = m_pRenderTarget->CreateSolidColorBrush(
    D2D1::ColorF(D2D1::ColorF::Black),
    &m_pBlackBrush
    );

下一个示例定义 一个D2D1_ELLIPSE, 并将其与上一示例中定义的画笔一起使用,以绘制椭圆的轮廓。 此示例生成下图所示的输出。

illustration of an ellipse with a solid stroke

D2D1_ELLIPSE ellipse = D2D1::Ellipse(
    D2D1::Point2F(100.f, 100.f),
    75.f,
    50.f
    );

m_pRenderTarget->DrawEllipse(ellipse, m_pBlackBrush, 10.f);

使用虚线笔划绘制省略号

前面的示例使用了纯笔划。 可以通过创建 ID2D1StrokeStyle,以多种方式修改笔划的外观。 ID2D1StrokeStyle 允许在笔划的开头和末尾指定形状,以及它是否具有短划线图案等。 以下示例创建描述虚线笔划的 ID2D1StrokeStyle 。 此示例使用预定义的短划线模式 ,D2D1_DASH_STYLE_DASH_DOT_DOT,但也可以指定自己的。

D2D1_STROKE_STYLE_PROPERTIES strokeStyleProperties = D2D1::StrokeStyleProperties(
    D2D1_CAP_STYLE_FLAT,  // The start cap.
    D2D1_CAP_STYLE_FLAT,  // The end cap.
    D2D1_CAP_STYLE_TRIANGLE, // The dash cap.
    D2D1_LINE_JOIN_MITER, // The line join.
    10.0f, // The miter limit.
    D2D1_DASH_STYLE_DASH_DOT_DOT, // The dash style.
    0.0f // The dash offset.
    );

hr = m_pDirect2dFactory->CreateStrokeStyle(strokeStyleProperties, NULL, 0, &m_pStrokeStyle);

下一个示例将笔划样式与 DrawEllipse 方法结合使用。 此示例生成下图所示的输出。

illustration of an ellipse with a dashed stroke

m_pRenderTarget->DrawEllipse(ellipse, m_pBlackBrush, 10.f, m_pStrokeStyle);

绘制并填充椭圆

若要绘制椭圆的内部,请使用 FillEllipse 方法。 下面的示例使用 DrawEllipse 方法来概述椭圆,然后使用 FillEllipse 方法绘制其内部。 此示例生成下图所示的输出。

illustration of an ellipse with a dashed stroke and then filled with a solid gray color

m_pRenderTarget->DrawEllipse(ellipse, m_pBlackBrush, 10.f, m_pStrokeStyle);
m_pRenderTarget->FillEllipse(ellipse, m_pSilverBrush);

下一个示例先填充椭圆,然后绘制其轮廓。 此示例生成下图所示的输出。

illustration of an ellipse filled with a solid gray color and then outlined with a dashed stroke

m_pRenderTarget->FillEllipse(ellipse, m_pSilverBrush);
m_pRenderTarget->DrawEllipse(ellipse, m_pBlackBrush, 10.f, m_pStrokeStyle);

这些示例中省略了代码。

绘制更复杂的形状

若要绘制更复杂的形状,请定义 ID2D1Geometry 对象,并将其与 DrawGeometryFillGeometry 方法一起使用。 有关详细信息,请参阅 几何图形概述

几何概述

画笔概述