Визуальные стили отключены во время работы 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
, но я хочу хотя бы проверить свое решение. И я не знаю, как воспроизвести ситуацию.