En mi aplicación tengo un formulario que modifico utilizando el método Dwm API DwmExtendFrameIntoClientArea para extender la altura de la barra de título de Aero Glass para que se dibuje parte de mi área de cliente de formulario en el cuadro Aero. Para lograr este efecto, también dibujo un rectángulo negro en la parte del área del cliente que está "sobre" el marco de cristal para que parezca transparente, como sugieren muchos artículos en línea. Esto funcionó bastante bien en Windows Vista/Windows 7, pero a medida que descargué VS 2010 y utilicé .NET Framework 4.0 como mi framework de tragget para construir mi aplicación, este enfoque ya no funciona. El problema es que el rectángulo negro es visible, es decir, el color negro ya no se considera transparente cuando se dibuja en el cristal Aero. ¿Alguien tiene una idea de lo que podría estar mal con eso y cómo se puede superar?.NET Framework 4.0 y dibujo en cuestión de Aero Glass
Respuesta
Perdónenme si esto no es útil, pero ¿es posible que simplemente hayan cambiado su paleta de colores? Muy a menudo parece que esas API tipo interoperabilidad de Windows pueden usar paletas PBGRA además de su paleta predeterminada, y es posible que su paleta de colores predeterminada haya cambiado de una versión de marco a otra. Debería ser lo suficientemente simple para probar si esto es cierto o no.
(Encontré un problema similar con los cursores de hardware de renderizado, donde transparente y negro se confundirían en determinadas circunstancias. Eventualmente resultó ser que estaba calculando mal el PBGRA de modo que uno de BGR era mayor que A, que puede sea cierto de su fondo destinado a ser de color transparente.)
Existen otras complicaciones con el uso del método DWM API. No estoy del todo seguro, pero desde la memoria, hay algo complicado con el establecimiento de los nuevos márgenes: si recuerdo correctamente, todos deben tener el mismo signo (+/-) o artefactos (como el fondo negro que aparece de repente) a veces apareció.
La respuesta a esta pregunta se describe aquí: http://msdn.microsoft.com/en-us/magazine/cc163435.aspx#S6 con soluciones para C#.
Extracto de la página del enlace (en caso de que el enlace está inactivo):
El uso de vidrio como fondo en la ventana es un poco complicado. Si renderiza algo naturalmente opaco (como las funciones GDI), obtendrá su elemento renderizado sobre vidrio, aunque a veces con resultados inesperados. Si desea mezclar el renderizado en la superficie del cristal, deberá aprovechar la funcionalidad que utiliza el canal alfa de colores, como GDI +, Windows Presentation Foundation o Windows XP Theme API.
Un problema particular es que la representación de un elemento GDI en negro utiliza el patrón de bits 0x00000000, que también resulta ser un negro completamente transparente si está utilizando un canal alfa. Esto significa que si dibujas con un pincel o bolígrafo GDI negro obtendrás un color transparente, no negro. El mayor problema que esto presenta es cuando intenta utilizar el color de texto predeterminado en un control de una etiqueta de texto que se encuentra en el área de vidrio. Como el color del texto predeterminado suele ser negro, DWM lo considerará transparente y el texto se escribirá incorrectamente en el cristal.
Y la solución para Windows Forms:
Afortunadamente, hay una serie de formas de evitar este problema. Usar controles de draw propietario es uno. Renderizar a un mapa de bits que tiene un canal alfa es otro. Afortunadamente, la forma más fácil de obtener texto en los controles es dejar que .NET Framework 2.0 use GDI + para usted. Esto se logra fácilmente estableciendo la propiedad UseCompatibleTextRendering en sus controles. De forma predeterminada, esta propiedad se establece en falso, por lo que los controles escritos para las versiones anteriores de .NET Framework generarán el mismo. Pero si lo configuras en verdadero, tu texto saldrá con la apariencia correcta.Puede establecer la propiedad globalmente con el método Application.SetUseCompatibleTextRenderingDefault. Si está usando Visual Studio® 2005, el código de la plantilla incluirá una llamada para establecer la representación de texto compatible en falso en la rutina principal antes de que se cree su formulario. Puede editar esto para establecerlo en verdadero como se muestra a continuación y todos sus controles se verán correctamente cuando se escriban en una ventana de vidrio.
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(true); // this line fixes an issue
Application.Run(new GlassForm());
}
- 1. Combinación de efectos Aero Glass y SWT
- 2. ¿Cómo cambia Windows el color Aero Glass?
- 3. .net Compact Framework 4.0
- 4. Aero Glass Bordes de Ventanas Emergentes en C#
- 5. Difuminando el fondo de una forma semitransparente (como Aero glass)
- 6. Tipo de varianza en .NET Framework 4.0
- 7. ¿Necesita .NET Framework 4.0 reiniciar?
- 8. ¿Incluye .Net Framework 4.0 Installer el .Net Framework 3.5?
- 9. SMO Ensambles en .NET Framework 4.0
- 10. Linq2SQL vs EF en .net Framework 4.0
- 11. .NET 4.0 Framework Requisitos de actualización?
- 12. Soporte de NHibernate .NET Framework 4.0?
- 13. Microsoft Fakes y .Net 4.0
- 14. ¿Puedo usar .NET Framework 4.0 con VS2008?
- 15. Biblioteca EXIF para el framework .NET 4.0
- 16. Sharepoint 2010 Fundación con .Net Framework 4.0
- 17. Log4Net y .NET 4.0
- 18. Añadir .Net Framework 4.0 en proyecto de instalación
- 19. Bug en el método File.ReadLines (..) de .NET Framework 4.0
- 20. Dibujo multiproceso en .NET?
- 21. WPF lento para iniciar en x64 en .NET Framework 4.0
- 22. ¿Cómo puedo obtener Aero Glass en un Windows Form sin fronteras?
- 23. PerformanceCounters en .NET 4.0 y Windows 7
- 24. ¿Dónde está GACUTIL para .NET Framework 4.0 en Windows 7?
- 25. ¿Dónde entró el servicio web ASP.NET en .Net Framework 4.0?
- 26. Instalación de .NET Framework 4.0, unidad de cambio
- 27. .NET 4.0 Entity framework expiró el tiempo de espera
- 28. aplicación de .NET Framework 4.0 desde la unidad USB
- 29. .NET 4.0 - AccessViolationException y WndProc
- 30. Log4Net y .NET 4.0 RC
Aero glass funciona en Windows 7? Creo que esto solo funciona con DWM en Windows Vista. – Svisstack
@Svisstack: Sí; Aero Glass funciona en Windows 7. – SLaks
Sí, funciona. Lo que no funciona es recurrir a él de la manera en que solía hacerlo cuando usaba versiones anteriores de .NET (<4.0) – WorldIntruder