首页 > 解决方案 > 从 SharpDX.Direct2D1 使用 DrawText 时如何检测文本溢出?

问题描述

我正在使用以下方法绘制RenderForm文本SharpDX

        string s = "";
        for (int i = 0; i < log.Count; i++)
            s += log[i] + "\n";
        renderView.DrawText(s, textFormat, logBoundsRect, brush, DrawTextOptions.Clip);

然而,最终日志列表变得足够长以使文本溢出。如何检测此溢出,以便我可以相应地调整我的日志列表的绘制量?

标签: c#direct2dsharpdx

解决方案


感谢@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变量,用于跟踪列表中从何处开始读取。


推荐阅读