2011-04-20 5 views
7

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); 
} 
+1

¿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

Respuesta

5

Windows envía un mensaje a su ventana principal. Lo atraparía, por ejemplo, en una anulación de WndProc para un formulario de Winforms. Escuche WM_DWMCOMPOSITIONCHANGED, número de mensaje 0x31e.

Cuestiones relacionadas