我正在尝试解决我的应用程序中的一个问题。我在 Vista 中开发应用程序,它在那里运行良好,但是当我将它带到 XP 时,表单变得迟缓且无响应。当我使用断点查看 Windows 消息时,我发现在 XP 中,表单大约每秒重复绘制一次(即使它并不真的需要);然而,在 Vista 上的相同测试并没有显示这种重复的绘画。
关于可能导致这种情况的任何想法?
我正在尝试解决我的应用程序中的一个问题。我在 Vista 中开发应用程序,它在那里运行良好,但是当我将它带到 XP 时,表单变得迟缓且无响应。当我使用断点查看 Windows 消息时,我发现在 XP 中,表单大约每秒重复绘制一次(即使它并不真的需要);然而,在 Vista 上的相同测试并没有显示这种重复的绘画。
关于可能导致这种情况的任何想法?
感谢大家的意见。现在问题已经解决了,在 Subversion 的帮助下!窗口迟缓是一个相对较新的问题,所以我决定及时回顾我使用 Subversion 的源代码,发现我最近将 WS_EX_COMPOSITED 样式标志应用于窗体以减少 Vista 中的闪烁。
protected override CreateParams CreateParams
{
get
{
CreateParams result = base.CreateParams;
result.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
return result;
}
}
当我将其注释掉时,该表单在 XP 中再次响应,并且重复的 WM_PAINT 消息消失了。因此,解决方案是仅在 Vista 或更高版本中应用 WS_EX_COMPOSITED。
protected override CreateParams CreateParams
{
get
{
CreateParams result = base.CreateParams;
if (Environment.OSVersion.Platform == PlatformID.Win32NT
&& Environment.OSVersion.Version.Major >= 6)
{
result.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
}
return result;
}
}
现在一切都很好!
在没有看到具体代码等的情况下,我不知道您的具体问题,但是由于桌面窗口管理器 (DWM),Vista 中的窗口绘制完全不同。由于合成效果,每个窗口的图像实际上都被缓存/双缓冲,因此您不会看到重新绘制的闪烁。
我建议您专注于解决 XP 上的问题,因为这显然是 DWM 在 Vista 上掩盖的问题。
某些原因导致您的部分或全部窗口失效。
正如@Jon 所说的没有太多细节,但这里有一些事情要寻找: