Как подписаться на событие уровня ОС, возникающее при отключении DWM-композиции / Aero Glass?

Я разрабатываю приложение C #, которое поддерживает Windows Aero в основной форме.

Некоторые приложения, которые поддерживают не поддерживают визуальные стили, например 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);
}

7
задан Cody Gray 21 April 2011 в 10:48
поделиться