WinForm-TextRenderer
来源:互联网 发布:为什么俞飞鸿抗老 知乎 编辑:程序博客网 时间:2024/06/03 22:42
2009-08-22
TextRenderer
DrawText(IDeviceContext dc, string text, Font font, Point pt, Color foreColor);
DrawText(IDeviceContext dc, string text, Font font, Rectangle bounds, Color foreColor);
......
Size MeasureText(string text, Font font);
Size MeasureText(string text, Font font, Size proposedSize);
Size MeasureText(string text, Font font, Size proposedSize, TextFormatFlags flags);
......
Graphics的DrawString方法:
Graphics.DrawString(string, Font, Brush, Rectangle, StringFormat)
为什么要用TextRenderer?
(1)对复杂的国际字符GDI比GDI 画的好一些. 如果Windows新支持一种语言, GDI会比GDI 支持的好一些。
(2)Windows Form里面的Control大多都用GDI来绘制字符串. 所以如果有时候你需要绘制和Control上的字符串完全一样的字符串, 或者测量Control上字符串准确的大小的话, 你必须使用GDI, 而非GDI .
(3)使用GDI 绘制/测量的结果会跟GDI有一定区别, 特别是字符串很长的情况下。GDI 会在程序运行时一直锁定字体文件, 从而很难更新字体.
(4)有的地方不得不使用TextRenderer来绘制文本。之前遇到了Graphics的一个问题,在美化ListBox控件时,在DrawItem事件的处理程序中使用Graphics.DrawString,发现不能正确显示。琢磨了半天,觉得自己代码也没有写错,但就是无法正确显示。后来看了人家的DrawItem事件代码中几乎都使用TextRenderer的DrawText方法,于是将之前的所有DrawString方法改为DrawText方法,奇迹般地发现能够正确的显示了。具体为什么出现这样的问题不得而知,但是至少利用TextRenderer解决了问题。
TextRenderer与Graphics的区别
(1)Graphics.DrawString方法是使用GDI 描绘文字列的,而TextRenderer.DrawText方法是使用GDI描绘的。
(2)TextRenderer.DrawText方法,是不能使用在印刷时使用的。
(3)指定文字的颜色时,Graphics使用Bursh格式刷,而TextRenderer使用Color描绘。因此,Graphics可以使用许多特殊的效果,如颜色渐变等,而TextRenderer却无法完成。
字符的串格式化
TextFormatFlags:TextRenderer.DrawText的一个参数,是一个枚举值,用于控制字符串格式。
StringFormat:System.Drawing命名空间中的一个sealed类, Graphics.DrawString的一个参数,也是用于字符串格式的控制。可以通过Alignment、FormatFlags、LineAlignment、Trimming等属性进行格式控制。
2010-07-14
TextRenderer方法中使用的坐标是不会经过仿射变换的。
TextRenderer.DrawText()与Graphics.DrawString()都可以进行绘制文本,在我前面的博文《TextRenderer》里面有详细的介绍。这里补充一点,那就是Graphics的所有仿射变换对TextRenderer不起作用,也即TextRenderer方法中使用的坐标是不会经过仿射变换的。
如下代码:
Rectangle rect = new Rectangle(0,0,200,30);
g.TranslateTransform(50, 50); //平移变换
g.DrawString("这是Graphics.DrawString方法", this.Font, Brushes.Red, rect);
TextRenderer.DrawText(g, "这是TextRenderer.DrawText方法", this.Font, rect, Color.Blue);
可能有人会觉得上面的两个字符串应该会叠加到一块,因为它们都绘制在同一个矩形框中,但实际结果如下图:
从图中可以看出,Graphics.DrawString()方法绘制的字符串是经过仿射变换的,而TextRenderer.DrawText()方法绘制的字符串是没有经过仿射变换的。
2010-08-24
TextRenderer与Graphics的速度问题
(1)文本测量速度:
(2)文本绘制速度:
转自:http://blog.sina.com.cn/s/blog_48a45b950100eqe7.html
- WinForm-TextRenderer
- WinForm-TextRenderer和Graphics的一些区别
- 为什么要用TextRenderer?
- TextRenderer和Graphics,TextBoxRenderer的一些区别
- VTK "Failed getting the TextRenderer instance"解决办法
- TextRenderer.MeasureText计算字符串文本所占的尺寸
- TextRenderer.MeasureText计算字符串文本所占的尺寸
- WinForm
- winform
- Winform
- WinForm
- WinForm
- Winform
- WinForm
- winform
- winform
- winform
- winform界面设计
- delphi 一个不了解原理的问题delphi 数据集下flag内容post后变没了
- NDK技术,Java项目调用C代码
- c# 发送邮件、附件
- 文本常用属性,常用于绘制
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- WinForm-TextRenderer
- AndroidMenu的应用之OptionMenu的应用
- Spring MVC 框架搭建及详解
- 四种常见的 POST 提交数据方式
- Python学习——leetcode(Length of Last Word)
- android 二次开发 莫名其妙问题三(版本控制问题)
- Hibernate current_session_context_class的事务说明
- 利用FFmpeg将 IPCamera 的RTSP转码成RTMP发布在RED5
- 深圳布吉妇科医院怎么样