7

我想将 DirectWrite 用于混合颜色文本格式(准确地说是语法突出显示),但似乎无法在 Layout 或 Typography 选项中找到方法。唯一的选择是在渲染文本时传递一个画笔,这对我不起作用,因为我基本上只有一个布局。帮助!

4

1 回答 1

12

用于IDWriteTextLayout::SetDrawingEffect对子范围应用绘图效果。如果您将 DWrite 与 D2D 一起使用DrawTextLayout,听起来您就是这样,那么该绘图效果将只是一个画笔(例如ID2D1Brush通过CreateSolidColorBrush或渐变画笔之一)。如果您已经实现了自己的IDWriteTextRendererfor IDWriteTextLayout::Draw,那么绘图效果可以是您解释的任何内容。在IDWriteTextRenderer::DrawGlyphRun回调中,然后调用QueryInterfacedrawingEffect 参数,或者如果您确定它是您自己的类型,则直接 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);
于 2011-09-10T07:54:09.170 回答