Визуальные стили отключены во время работы DWM

У меня есть заголовок окна чертежа владельца, который я создаю с помощью C#, Windows Forms, P/Invoking dwmapi.dll и нескольких других библиотек Windows.

Чтобы определить, включен ли DWM, я использую следующий код:

private bool isDwmWindowFramePaintEnabled()
{
    try
    {
        return WinApi.DwmIsCompositionEnabled();
    }
    catch (DllNotFoundException)
    {
        return false;
    }
}

Для рисования заголовка окна я использую визуальный стиль рендера. Я рисую заголовок окна только при включенном DWM. Вот кусок кода:

var renderer = new VisualStyleRenderer(VisualStyleElement.Window.Caption.Active);
WinApi.DrawThemeTextEx(renderer.Handle, memDc, 0, 0, text, -1, uFormat, ref clientRect, ref dttOpts);

Мой код должен работать на ОС Windows, поддерживающей темы Aero (7/Vista/8). Недавно я получил следующее исключение в VisualorStyleRender:

System.InvalidOperationException: Visual Styles-related operation resulted in an error because visual styles are currently disabled in the client area.

Это произошло в ОС Windows 8 (6.2.9200.0). Когда я тестировал мой код, он отлично работал на любые темы в Windows Vista/7/8, включая классические и с высокой контрастностью.

Итак, мой вопрос: почему это происходит? Возможно ли, что визуальные стили были отключены в Windows 8? И как мне это решить? Есть ли событие, уведомляющее о том, что визуальные стили отключены? Я знаю, что могу проверить, включены ли визуальные стили, используя свойство VisualStyleRenderer.IsSupported, но я хочу хотя бы проверить свое решение. И я не знаю, как воспроизвести ситуацию.

0 ответов

Другие вопросы по тегам