我正在开发一个以主窗体支持Windows Aero的C#应用程序。
某些不支持视觉样式的应用程序(例如GoToMeeting)禁用了视觉样式,并且在GoToMeeting运行时错误地绘制了我的表单(Aero客户端区域被绘制为黑色)。
我如何订阅在禁用视觉样式时触发的OS事件?然后我可以调整窗口中的客户区域以便正确绘制。
托管和非托管解决方案对我有效。
提前致谢。
编辑:根据Hans的回答,以下是管理此事件的代码:
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);
}
答案 0 :(得分:5)
Windows向您的顶层窗口发送消息。你可以将它捕获到Winforms表单的WndProc覆盖中。侦听WM_DWMCOMPOSITIONCHANGED,消息号0x31e。