首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TextBox使用GDI还是GDI+?

TextBox使用GDI还是GDI+?
EN

Stack Overflow用户
提问于 2014-07-31 14:15:47
回答 3查看 1.6K关注 0票数 2

基本上,我想测量TextBox中的文本大小,我发现TextRenderer给了我正确的值,而Graphics会给出错误的值。因此,似乎TextBox应该使用GDI来绘制文本,对吗?

然而,无论我读到什么地方,我都看到它应该使用GDI+。例如:

那么,为什么我得到的结果与TextRenderer一致,而不是图形,而应该是相反的呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-31 14:26:30

好吧,一些更多的研究表明,什么是“违约”是一种混淆。

当这些源讨论“默认”时,他们谈论“默认(1)”,如“如果没有执行额外的代码”,而不是“缺省(2)”,如“如果没有采取额外的行动”。

因为在"Default(2)“中,"Application.SetCompatibleTextRenderingDefault(false)”被添加到一个新项目的Program.cs文件中,这使得TextBox类使用GDI来进行呈现,这不是它的“默认(1)”,但是实际上,如果您作为一个程序员不采取任何额外的操作,就会发生这种情况。

这基本上就是我想要的。

PS:我的假设是“默认(1)”是正确的,这是基于这个问题UseCompatibleTextRendering property not created by designer when it is set to false的公认答案

票数 0
EN

Stack Overflow用户

发布于 2014-07-31 14:26:01

.NET框架在大多数地方都使用GDI+。Graphics类是GDI+的包装器。

但是,WinForms也封装了不使用GDI+的本机Win32控件。他们用GDI。TextBox和RichTextBox就是这方面的例子。他们使用GDI绘制他们的文本。

要度量GDI+文本,您将使用Graphics.MeasureString (注意那里的Graphics类)。要度量GDI文本,您将使用TextRenderer.MeasureText (注意Graphics类如何不提供它)。

事情确实变得更复杂了:有些控件确实使用GDI+进行绘图。Button控件就是一个例子。除非您将其FlatStyle设置为System,否则它是由.NET框架绘制的,并且所有者绘图是使用GDI+ (.NET使用的图形子系统)完成的。但是,如果将FlatStyle设置为System,则呈现将委托给本机Win32 Button控件,该控件使用GDI (与所有本机Win32控件一样)。

我的建议是尽可能使用GDI (TextRenderer)来绘制文本。如果使用实现FlatStyle属性的控件,请将其设置为System。相比之下,用GDI+绘制的文本看起来糟透了。作为一种奖励,您将获得真正看起来本地的控件,并与系统相融合。FlatStyle.System是获得按钮控制的唯一方法,它实际上是脉冲和发光。WinForms呈现器没有实现这一点。

票数 2
EN

Stack Overflow用户

发布于 2018-04-20 15:33:13

当我们给出存储文件夹中某物的路径时,通常会出现GDI+错误,而该路径不正确,这意味着文件夹无法访问或无法找到该路径。因此,只需更正路径或允许文件夹安全访问即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25061209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档