我有一个所有者绘图窗口标题,我使用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
检查是否启用了视觉样式,但我至少要测试我的解决方案。我不知道如何重现这种情况。