zoukankan      html  css  js  c++  java
  • C#/WPF 计算字串的真实长度,调整控件的宽度

    下面函数是经常用到的计算字串长度的方法:

            private double MeasureTextWidth(String str, string fontName, double fontsize, double width)
            { 
                double width = -1;     
                try
                {
                    System.Drawing.Graphics graphics = System.Drawing.Graphics.FromHwnd(m_hWnd);
                    graphics.PageUnit = System.Drawing.GraphicsUnit.Point;
                    System.Drawing.Font font = new System.Drawing.Font(fontName, (float)fontsize);

                    System.Drawing.SizeF size = graphics.MeasureString(str, font);

                    width = size.width;

                    font.Dispose();
                    graphics.Dispose();
                }
                catch (System.Exception e)
                {
                }
                return width;
            }

    但是事实上,Graphics.MeasureString并不可靠,在不同的SKU下得到的结果会不同,原因不明,可能跟显卡驱动也会有关系。今天尝试新的方法经测试有效,贡献出来:

            private double MeasureTextWidth(string text, double fontSize, string fontFamily)
            {
                FormattedText formattedText = new FormattedText(
                text,
                System.Globalization.CultureInfo.InvariantCulture,
                FlowDirection.LeftToRight,
                new Typeface(fontFamily.ToString()),
                fontSize,
                Brushes.Black
                );
                return formattedText.WidthIncludingTrailingWhitespace;
            }

    另,附送枚举已安装字体的方法:

                    System.Drawing.FontFamily[] fontFamilies;
                    InstalledFontCollection installedFontCollection = new InstalledFontCollection();
                    fontFamilies = installedFontCollection.Families;

                    int count = fontFamilies.Length;
                    log("fontFamilies.Length=" + fontFamilies.Length);
                    for (int i = 0; i < count; i++)
                    {
                        fontName = fontFamilies[i].Name;
                        log("fontName: " + fontName);
                    }

     
    参考自:http://zwkufo.blog.163.com/blog/static/258825120116663748213/
  • 相关阅读:
    css清除select默认的样式
    网站性能优化的方法--Yahoo
    jQuery写toTop(回到顶部)效果
    jquery的addClass、removeClass、toggleClass方法
    css选择器汇总
    日期对象的正确写法
    顶会热词统计
    《人月神话》读后感二
    新闻详情页实现
    第八周总结
  • 原文地址:https://www.cnblogs.com/chuhaida/p/5610061.html
Copyright © 2011-2022 走看看