WinForm-TextRenderer和Graphics的一些区别
来源:互联网 发布:删除旧版本windows 编辑:程序博客网 时间:2024/06/10 17:13
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等属性进行格式控制。
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()方法绘制的字符串是没有经过仿射变换的。
TextRenderer与Graphics的速度问题
(1)文本测量速度:
(2)文本绘制速度:
转自新浪博客:
原文链接
- WinForm-TextRenderer和Graphics的一些区别
- TextRenderer和Graphics,TextBoxRenderer的一些区别
- WinForm-TextRenderer
- Graphics的一些方法
- WPF和Winform的区别
- Graphics.PageScale Graphics.ScaleTransform 的区别
- JFC 中绘制方法 paint(Graphics g) 和 paintComponent(Graphics g) 的区别
- JFC 中绘制方法 paint(Graphics g) 和 paintComponent(Graphics g) 的区别(转)
- winform 和 网页的一点区别是
- Winform、WPF和silverlight的区别
- wpf和winform区别
- winform的一些知识
- Winform的界面绑定和数据处理的一些事
- WinForm加载Flash,和对Flash的一些简单操作
- 黑马程序员—关于WinForm和WPF的一些不同点
- c# winform comboBox的常用一些属性和用法
- WINFORM vscrollbar 和 hscrollbar的一些重要属性说明
- C#Graphics.DrawImage的一些问题
- inline
- arcgis for flex 中Panel拖动
- poj 1664 放苹果(递推)
- 数据分析参考资料整理
- C# 文件下载相关代码
- WinForm-TextRenderer和Graphics的一些区别
- postgresSQL服务进程体系结构
- 2013年上半年工作总结,哇哈哈哈,给自己看的。
- cisco查看机框 板卡 电源 SN 和一些常用命令
- poj 1088 滑雪
- Android下的多媒体开源项目
- The secret of ROWID
- 20非常有用的Java程序片段
- 通过ant脚本,编译打包android工程