Estoy desarrollando una aplicación C# que admite Windows Aero en el formulario principal.¿Cómo me suscribo a un evento de nivel de sistema operativo cuando la composición de DWM/Aero Glass está desactivada?
Algunas aplicaciones que no son compatibles con Estilos visuales, por ejemplo GoToMeeting, deshabilitan los estilos visuales y mi formulario se dibuja incorrectamente mientras se ejecuta GoToMeeting (el área del cliente Aero se dibuja en negro).
¿Cómo podría suscribirme a un evento del SO que se dispara cuando los estilos visuales están deshabilitados? Entonces podría ajustar el área del cliente en mi ventana para dibujar correctamente.
Las soluciones gestionadas y no gestionadas son válidas para mí.
Gracias de antemano.
EDITAR: De acuerdo con la respuesta de Hans, aquí está el código para manejar este evento:
private const int WM_DWMCOMPOSITIONCHANGED = 0x31e;
[DllImport("dwmapi.dll")]
private static extern void DwmIsCompositionEnabled(ref bool pfEnabled);
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_DWMCOMPOSITIONCHANGED)
{
bool compositionEnabled = false;
DwmIsCompositionEnabled(ref compositionEnabled);
if (compositionEnabled)
{
// composition has been enabled
}
else
{
// composition has been disabled
}
}
base.WndProc (ref m);
}
¿Detectaría si Aero está habilitado lo que está buscando? Si es así, esto puede ayudar: http://stackoverflow.com/questions/5114389/how-make-sure-areo-effect-is-enabled – joshhendo