c# – 当禁用DWM组合/ Aero Glass时,如何订阅引发的OS级事件?

前端之家收集整理的这篇文章主要介绍了c# – 当禁用DWM组合/ Aero Glass时,如何订阅引发的OS级事件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个以主窗体支持 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);
}

解决方法

Windows将消息发送到您的顶层窗口.你可以将它捕获到Winforms表单的WndProc覆盖中.侦听WM_DWMCOMPOSITIONCHANGED,消息号0x31e.

猜你在找的C#相关文章