Как обнаружить переполнение текста при использовании DrawText из SharpDX.Direct2D1?

#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 , который отслеживает, с какого места в списке начинать чтение.