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