2011-04-20 23 views
7

我正在開發一個支持主窗體中的Windows Aero的C#應用​​程序。如何在訂閱DWM組合/ Aero Glass禁用時引發的操作系統級事件?

某些不支持視覺樣式的應用程序(例如GoToMeeting)會禁用視覺樣式,並且在GoToMeeting正在運行時(Aero客戶端區域被繪製爲黑色),會錯誤地繪製表單。

如何禁用視覺樣式時如何訂閱觸發的操作系統事件?然後我可以調整我的窗口中的客戶區域以正確繪製。

託管和非託管解決方案對我而言是有效的。

在此先感謝。


編輯:根據漢斯的答案,這裏是管理這個事件的代碼:

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之後?如果是這樣,這可能有所幫助:http://stackoverflow.com/questions/5114389/how-make-sure-areo-effect-is-enabled – joshhendo 2011-04-20 13:04:11

回答

5

的Windows將消息發送到你的頂層窗口。例如,您可以將它陷入WinForms窗體的WndProc覆蓋。收聽WM_DWMCOMPOSITIONCHANGED,消息號碼0x31e。