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

Я разрабатываю приложение на 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);
}

1 Ответ

5 голосов
/ 20 апреля 2011

Windows отправляет сообщение в ваше окно верхнего уровня.Вы могли бы поймать это, скажем, в переопределении WndProc для формы Winforms.Прослушайте WM_DWMCOMPOSITIONCHANGED, номер сообщения 0x31e.

...