我正在开发一个在主窗体中支持 Windows Aero 的 C# 应用程序。
一些不支持视觉样式的应用程序,例如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);
}