csdn 新首页的全部内容目前都是手工更新的,工作量很大,原因之一是为了裁减文章的标题,以便不出现超长换行的状况。
本来可以在程序中控制标题宽度的,超过的话自动截断并用 tooltip 的形式显示全标题,但是因为 csdn 首页采用的字体是 tahoma 12px,英文字体不是等宽的,因此难以确定宽度。
一直以来没动脑筋想解决办法,昨天开会,关于页面维护工作量过大的意见再次被提出,因此某些栏目的内容势必需要自动更新,因此标题需要自动截断。
于是我需要获得字符串的尺寸,像素单位。
.net 的 system.drawing 空间中,graphics 对象提供了能达到此目的的方法:measurestring(),其重载信息参见 msdn。
昨晚试验的取得字符串长度的代码段如下:
private void mainform_paint(object sender, system.windows.forms.painteventargs e){ font font = new font("tahoma", 11, graphicsunit.pixel); sizef size = e.graphics.measurestring(drawtext, font); this.text = size.width.tostring(); e.graphics.drawrectangle(new pen(color.red, 1), 0.0f, 0.0f, size.width, size.height); e.graphics.drawstring(drawtext, font, brushes.black, new pointf(0, 0));}
目前感觉取得的宽度像素值略大于理论值。明天继续完善之~
