Используйте IDWriteTextLayout::SetDrawingEffect
, чтобы применить эффекты рисования к поддиапазонам. Если вы используете DWrite с D2D DrawTextLayout
, что звучит так, как вы, то этот эффект рисования будет просто кистью (например, ID2D1Brush
через CreateSolidColorBrush
или одна из градиентных кистей). Если вы реализовали свой собственный IDWriteTextRenderer
для IDWriteTextLayout::Draw
, тогда эффект рисования может быть таким, каким вы его интерпретируете. В обратном вызове IDWriteTextRenderer::DrawGlyphRun
вы затем вызываете QueryInterface
для параметра DrawingEffect или, если вы уверены, что это ваш собственный тип, просто static_cast его напрямую.
// ... create the colored brushes and determine where to draw ...
wchar_t const* text = L"Red Green";
dwriteFactory->CreateTextLayout(....., OUT &textLayout);
DWRITE_TEXT_RANGE textRange1 = {0,3}, textRange2 = {4,5};
textLayout->SetDrawingEffect(redBrush, textRange1);
textLayout->SetDrawingEffect(greenBrush, textRange2);
renderer->DrawTextLayout(point, textLayout, defaultBrush);