vertical tutorial c# .net textbox gdi+ gdi

c# - tutorial - ¿TextBox usa GDI o GDI+?



c# drawstring vertical text (2)

Básicamente, quiero medir el tamaño del texto en un TextBox, y descubrí que TextRenderer me da los valores correctos, mientras que Graphics me daría valores incorrectos. Entonces, parece que TextBox debería usar GDI para dibujar texto, ¿verdad?

Sin embargo, dondequiera que leo, veo que se supone que debe usar GDI +. Por ejemplo:

Entonces, ¿por qué obtengo resultados consistentes con TextRenderer y no con Graphics cuando se supone que es de otra manera?


De acuerdo, algunas investigaciones más han demostrado que hay una confusión de lo que es "Por defecto ".

Cuando estas fuentes hablan de " Predeterminado ", hablan de " Predeterminado (1) " como en " Si no se ejecuta código adicional ", no " Predeterminado (2) " como en " Si no se toma ninguna acción adicional ".

Porque por " Predeterminado (2) ", "Application.SetCompatibleTextRenderingDefault (false)" se agrega al archivo Program.cs de un nuevo proyecto, lo que hace que la clase TextBox use GDI para la representación, que no es el " Predeterminado (1) " para pero, de hecho, esto es lo que sucede si usted, como programador, no toma ninguna medida adicional.

Esto es básicamente lo que me atrapó.

PD: Estoy basando la suposición de que es cierto por "Predeterminado (1)" en la respuesta aceptada de esta pregunta . Propiedad de CompatibilidadTextoDeRespuesta no creada por el diseñador cuando está configurada como falsa.


.NET Framework usa GDI + en la mayoría de los lugares. La clase Graphics es una envoltura alrededor de GDI +.

Sin embargo, WinForms también envuelve controles Win32 nativos, que no usan GDI +. Usan GDI. TextBox y RichTextBox son ejemplos de esto. Dibujan su texto usando GDI.

Para medir el texto GDI +, usará Graphics.MeasureString (observe la clase Graphics allí). Para medir el texto de GDI, usará TextRenderer.MeasureText (observe cómo no lo proporciona la clase Graphics ).

Las cosas se vuelven un poco más complicadas: algunos controles usan GDI + para fines de dibujo. El control Button es un ejemplo de esto. A menos que tenga su FlatStyle configurado en System, está dibujado por el propietario .NET Framework, y ese dibujo del propietario se hace usando GDI + (el subsistema de gráficos utilizado por .NET). Sin embargo, si configura FlatStyle en Sistema, el renderizado se delega en el control Button Win32 nativo, que usa GDI (como todos los controles Win32 nativos).

Mi sugerencia es usar GDI ( TextRenderer ) siempre que sea posible para dibujar texto. Si usa un control que implementa la propiedad FlatStyle, configúrelo en Sistema. El texto dibujado con GDI + se ve pésimo en comparación. Como beneficio adicional, obtendrás controles que parecen nativos y se mezclarán con el sistema. FlatStyle.System es la única manera de obtener un control de botón que realmente emita impulsos y luzca. El representador de WinForms no implementa esto.