代码之家  ›  专栏  ›  技术社区  ›  Aidan Ryan

文本渲染器的准确性。MeasureText结果

  •  5
  • Aidan Ryan  · 技术社区  · 16 年前

    TextRenderer.MeasureText(myControl.Text, myControl.Font);
    

    • 如果TextRenderer报告的宽度小于控件的宽度,但文本仍被截断,则为假阴性。这种情况发生在“Estacin de trabajo”时——不确定重音是否会以某种方式影响宽度计算?

    是否有任何方法可以提高MeasureText方法的准确性?我应该调用一个接受设备上下文和/或格式标志的覆盖吗?

    5 回复  |  直到 16 年前
        1
  •  8
  •   anatolyArts    15 年前

    Graphics g=Graphics.FromHwnd(YOUR CONTROL HERE.Handle);
    SizeF s=g.MeasureString("YOUR STRING HERE", Font, NULL, NULL, STRING LENGTH HERE, 1)
    
        2
  •  6
  •   arbiter    16 年前

    是否有任何方法可以提高MeasureText方法的准确性?我应该调用一个接受设备上下文和/或格式标志的覆盖吗?

    你已经自己回答了你的问题。实际上,MeasureText基于Win32 DrawTextEx,如果没有有效的设备上下文,此函数就无法工作。因此,当您在没有hdc的情况下调用MeasureText覆盖时,它会在内部创建与桌面兼容的hdc来进行测量。

    当然,测量取决于额外的TextFormatFlags。还要记住,标签绘制(和测量)取决于 UseCompatibleTextRendering .

    GetPreferredSize 方法。

        3
  •  3
  •   fusi    16 年前

    查看此函数的TextFormatFlags参数:

    TextRenderer::MeasureText(String, Font, Size, TextFormatFlags) 
    

    http://msdn.microsoft.com/en-us/library/8wafk2kt.aspx

        4
  •  1
  •   Jason Jackson    16 年前

    推荐文章