2011-04-20 2 views
7

기본 폼에서 Windows Aero를 지원하는 C# 응용 프로그램을 개발 중입니다.DWM composition/Aero Glass가 비활성화 된 경우 발생하는 OS 수준 이벤트를 구독하려면 어떻게합니까?

비주얼 스타일을 지원하지 않는 일부 응용 프로그램 (예 : GoToMeeting)은 시각적 스타일을 비활성화하고 GoToMeeting이 실행되는 동안 양식이 잘못 그려집니다 (Aero 클라이언트 영역은 검은 색으로 그려집니다).

비주얼 스타일이 사용 중지 된 경우 어떻게 해고당하는 OS 이벤트에 가입 할 수 있습니까? 그런 다음 창에서 클라이언트 영역을 올바르게 그려야합니다.

관리 솔루션과 관리되지 않는 솔루션이 적합합니다.

미리 감사드립니다.


편집는 :

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

에어로가 활성화되어 있는지 감지하고 있습니까? 그렇다면 도움이 될 수 있습니다. http://stackoverflow.com/questions/5114389/how-make-sure-areo-effect-is-enabled – joshhendo

답변

5

Windows가 최상위 창에 메시지를 보냅니다 : 한스의 대답에 따르면, 여기에이 이벤트를 관리 할 수있는 코드입니다. Winforms 양식에 대한 WndProc 재정의에서이를 트래핑 할 수 있습니다. WM_DWMCOMPOSITIONCHANGED, 메시지 번호 0x31e를 청취하십시오.