#c# #direct2d #sharpdx
#c# #direct2d #sharpdx
Вопрос:
Я рисую текст в a RenderForm
SharpDX
, используя:
string s = "";
for (int i = 0; i < log.Count; i )
s = log[i] "n";
renderView.DrawText(s, textFormat, logBoundsRect, brush, DrawTextOptions.Clip);
Однако в конечном итоге список журналов становится достаточно длинным для переполнения текста. Как мне обнаружить это переполнение, чтобы я мог соответствующим образом настроить, какая часть моего списка журналов отображается?
Комментарии:
1. Вы не можете с помощью DrawText, вы должны создать TextLayout (нарисовать его с помощью DrawTextLayout). TextLayout имеет метод GetMetrics, который сообщит вам размер текста.
Ответ №1:
Я понял, как это сделать, благодаря комментарию @Simon Mourier .
string s = "";
TextLayout tl;
while (true) {
s = "";
for (int i = logPosition; i < log.Count; i ) {
s = log[i];
if (i 1 < log.Count)
s = "n";
}
tl = new TextLayout(factory, s, textformat, logBoundsRect.Width, logBoundsRect.Height);
if (!(tl.Metrics.Height > logBoundsRect.Height))
break;
logPosition ;
tl.Dispose();
};
renderView.DrawTextLayout(logBoundsRect.TopLeft, tl, brush);
tl.Dispose();
logPosition
является глобальным int
, который отслеживает, с какого места в списке начинать чтение.