7

混合色のテキストの書式設定 (正確には構文の強調表示) に DirectWrite を使用したいのですが、レイアウト オプションまたはタイポグラフィ オプションのいずれかで、それを行う方法が見つからないようです。唯一のオプションは、テキストをレンダリングするときにブラシを渡すことですが、基本的にレイアウトが 1 つしかないため、これはうまくいきません。ヘルプ!

4

1 に答える 1

12

IDWriteTextLayout::SetDrawingEffectサブ範囲に描画効果を適用するために使用します。D2D で DWrite を使用してDrawTextLayoutいる場合は、そのように聞こえますが、その描画効果は単なるブラシになります (ID2D1Brush経由CreateSolidColorBrushまたはグラデーション ブラシの 1 つなど)。IDWriteTextRenderer独自のforを実装している場合IDWriteTextLayout::Draw、描画効果は解釈したとおりになります。IDWriteTextRenderer::DrawGlyphRunコールバックで、drawingEffect パラメーターを呼び出すかQueryInterface、それが独自の型であることが確実な場合は、それを直接 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 に答える