最近在为eBizPlat做一个代码编辑器,需要关键字高亮显示,每行都切成许多段,在输出时发现问题,用Graphics.MeasureString()函数算出的值比实际宽度大许多,分片输出的位置相差很大,甚为蹊跷,上网一查,终于发现问题所在,现将解决之道总结一下,以便后来者借鉴。

public float CalTextWidth(Graphics g, Font font, string text)

{

StringFormat sf = StringFormat.GenericTypographic;

sf.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;

SizeF s = g.MeasureString(text, font, 0, sf);

return s.Width;

}

这是为什么呢,原来在Graphics.MeasureString()函数调用中,若不指定StringFormat,则会以缺省的StringFormat来处理。

在代码第4行处,因为本人需要计算空格宽度,增加StringFormat.MeasureTrailingSpaces枚举值,若不需要计算空格宽度,则可忽略。

Graphics.MeasureString 不能获得精确宽度的问题相关推荐

  1. .NET Graphics.MeasureString 的使用

    在画图过程中,Graphics.MeasureString可以取得字符串的宽度及高度等信息,对于字符串的存放坐标的计算非常有用,尤其是居中显示时. '------------------------- ...

  2. 测量string变量长度函数_利用Graphics::MeasureString函数测量字符串的宽度,高度

    我就吐一句槽,今天被这个函数完虐.... 当我们需要获得一个字符串的长度时(注意,不是length,这只是返回该字符串的字符个数),我们需要知道的是一个字符串的长度也就是一个字符串的宽,说到底就是像素 ...

  3. c# 计算空格宽度像素_C# WinForm,Graphics.MeasureString 计算不准确的坑

    Graphics.MeasureString 可以计算出指定字符串在给定字体Font的尺寸SizeF,它的计算有坑:如果把字符串拆开成一个一个单字字符串并逐个计算尺寸,然后把Width加起来,你会发现 ...

  4. Bypass Graphics.MeasureString limitations

    http://www.codeproject.com/cs/media/measurestring.asp Bypass Graphics.MeasureString limitations By P ...

  5. Graphics.MeasureString用指定的字体绘制时测量指定的字符串

    Graphics的MeasureString方法,只要指定了字体和字符串后,用这个方法就能获得一个矩形的区域,这个区域是Graphics对象用DrawString方法在空间表面绘制字符串时所要的区域. ...

  6. js获取精确宽度/高度(带小数位像素)

    问题:用jquery获取div等块级元素的宽高时不能精确获取,只能得到整数部分像素,不能获取小数位px.请看下面事故: <!DOCTYPE html> <html lang=&quo ...

  7. js获取精确宽度/高度(带小数位的像素)

    解决方法:window.getComputedStyle().getBoundingClientRect() 问题:1.用jquery获取div等块级元素的宽高时不能精确获取,只能得到整数部分像素,不 ...

  8. 关于计算文字显示占用画面大小(System.Drawing.Graphics.MeasureString)

    最近遇到了一个需要手动为显示文字换行的场合,网上转了一圈,最后形成了下面的代码: var font = new Font("微软雅黑", 9F);var maxTextWidth ...

  9. C#如何测量字符串的高度宽度和精确取得字符串的高度宽度

    C#如何测量字符串的高度宽度和精确取得字符串的高度宽度 因为MFC中CDC有GetTextExtent()可以获得字符串的高度宽度 像素单位,所以自然想到c#的GDI+的MeasureString,这 ...

最新文章

  1. 用tomcat插件 在Eclipse 中配置Tomcat项目
  2. Shark集群搭建配置
  3. 不变(Invariant), 协变(Covarinat), 逆变(Contravariant) : 一个程序猿进化的故事
  4. Android之解决APP奔溃重启导致Fragment白屏问题
  5. Android环境的安装遇到的问题
  6. 深入理解JavaScript系列:闭包(Closures)
  7. 中国2008经济数据
  8. 山东大学软件学院计算机组成原理课程设计实验四
  9. 【Linux学习笔记】9. Linux打包压缩解压缩命令tar
  10. beetl html模板,Beetl模板引擎之自定义html标签
  11. 记一次跟突破360主机卫士上传
  12. oracle异地容灾备份 英文6,异地容灾备份的方案.doc
  13. Eclipse生成jar包和导入jar包
  14. ibm服务器互换硬盘,实战IBM xSeries 346服务器更换硬盘 - 鲜甜IT.Net
  15. 高性能平台设计——美团旅行结算平台实践
  16. 用Navicat连接MySQL的安装及配置
  17. IAMP方式下载邮件记录
  18. mysql 1265错误_mysql – 错误1265.尝试从txt文件加载数据时,列的数据被截断
  19. Activiti - 新一代的开源 BPM 引擎
  20. 矩阵指数(The Exponential of a Matrix)

热门文章

  1. 中甲新军能否重返赛场再成疑 川足前景扑朔迷离
  2. 国产家用投影仪什么品牌的好?便携式投影仪推荐
  3. 量子计算和人工智能:应该知道的10件事
  4. 小候鸟图书角项目活动之相趣冬月 阅读成长 妙笔绘秋
  5. 在线油耗计算机,计算器新玩法 Windows 7变身油耗计算器
  6. 无人驾驶,充满想象的美好未来
  7. android preference控件,Android Preference 设置项简单使用详解
  8. 已解决Cannot start compiler The output path is not specified for module untitled
  9. 动态IP(DHCP)、静态IP、拨号(PPPOE)三种上网设置区别
  10. 稳态视觉诱发电位SSVEP介绍