DWM正在运行时禁用了视觉样式

时间:2014-03-07 14:40:48

标签: c# windows dwm visual-styles

我有一个所有者绘图窗口标题,我使用C#,Windows窗体,P /调用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);

我的代码应该适用于支持Aero主题(7 / Vista / 8)的Windows操作系统。 最近我在VisualStyleRender c'tor中得到了下一个例外:

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 个答案:

没有答案