2011-04-20 24 views
7

Windows Aero'yu ana formda destekleyen bir C# uygulaması geliştiriyorum. Görsel Stilleri desteklemeyen bazı uygulamalar, örneğin, GoToMeeting, görsel stilleri devre dışı bırakın ve GoToMeeting çalışırken Formum yanlış çizilir (Aero istemci alanı siyah çizilir).DWM kompozisyonu/Aero Glass devre dışı bırakıldığında yükseltilen bir OS seviyesinde etkinliğe nasıl abone olurum?

Görsel stiller devre dışı bırakıldığında işlenen bir OS olayına nasıl abone olabilirim? Ardından, istemci alanını doğru şekilde çizilmek için penceremde ayarlayabilirim.

Yönetilen ve yönetilmeyen çözümler benim için geçerlidir.

Şimdiden teşekkürler.


DÜZENLEME:

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

Aero'nun ne yaptığını etkinleştirip etkinleştirmediğini tespit eder miydi? Eğer öyleyse, bu yardımcı olabilir: http://stackoverflow.com/questions/5114389/how-make-sure-areo-effect-is-enabled – joshhendo

cevap

5

Windows toplevel penceresine bir mesaj gönderir: Hans'ın yanıta göre, burada bu etkinliği yönetmek için koddur. Bunu bir Winforms formu için WndProc geçersiz kılmak. WM_DWMCOMPOSITIONCHANGED, ileti numarası 0x31e için dinleyin.