Поделиться через


Рисование и заполнение базовой фигуры

В этом разделе описывается, как нарисовать простую фигуру. Интерфейс ID2D1RenderTarget предоставляет методы для структурирования и заполнения многоточия, прямоугольников и линий. В следующих примерах показано, как создать и нарисовать многоточие.

Этот раздел состоит из следующих подразделов.

Рисование контура эллипса с помощью сплошного росчерка

Чтобы нарисовать контур эллипса, определите кисть (например , ID2D1SolidColorBrush или ID2D1LinearGradientBrush) для рисования контура и D2D1_ELLIPSE для описания положения и измерений эллипса, а затем передайте эти объекты в метод ID2D1RenderTarget::D rawEllipse . В следующем примере создается черная кисть сплошного цвета и она сохраняется в m_spBlackBrush член класса.

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

Следующий пример определяет D2D1_ELLIPSE и использует его с кистью, определенной в предыдущем примере, для рисования контура эллипса. В этом примере создаются выходные данные, показанные на следующем рисунке.

иллюстрация эллипса со сплошным штрихом

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 . В этом примере создаются выходные данные, показанные на следующем рисунке.

иллюстрация эллипса с пунктирным штрихом

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

Рисование и заполнение эллипса

Чтобы закрасить внутреннюю часть эллипса, используйте метод FillEllipse . В следующем примере метод DrawEllipse используется для контура эллипса, а затем используется метод FillEllipse для рисования его внутренней части. В этом примере создаются выходные данные, показанные на следующем рисунке.

иллюстрация эллипса с пунктирным штрихом, а затем заполненный сплошным серым цветом

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

В следующем примере сначала заполняется многоточие, а затем рисуется его контур. В этом примере создаются выходные данные, показанные на следующем рисунке.

иллюстрация эллипса, заполненного сплошным серым цветом, а затем контура пунктирным штрихом

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

Код был опущен в этих примерах.

Рисование более сложных фигур

Чтобы нарисовать более сложные фигуры, необходимо определить объекты ID2D1Geometry и использовать их с методами DrawGeometry и FillGeometry . Дополнительные сведения см. в разделе Общие сведения о геометриях.

Обзор геометрий

Обзор кистей