我正在开发一个在主窗体中支持 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);
}
最佳答案
Windows 向您的顶层窗口发送一条消息。例如,您会将其困在 Winforms 窗体的 WndProc 覆盖中。监听 WM_DWMCOMPOSITIONCHANGED,消息编号 0x31e。
关于c# - 如何订阅在禁用 DWM 组合/Aero Glass 时引发的操作系统级事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5730753/