7

我正在开发一个在主窗体中支持 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);
}
4

1 回答 1

5

Windows 向您的顶层窗口发送一条消息。例如,您会将其捕获在 Winforms 表单的 WndProc 覆盖中。监听 WM_DWMCOMPOSITIONCHANGED,消息号 0x31e。

于 2011-04-20T13:16:02.687 回答