设置:我有一个定义了区域的顶级窗口(使用 创建SetWindowRgn()
),并且我有一个移动的子元素(使用SetWindowPos()
),这样它的一些像素就会与父窗口区域的剪辑部分重叠。
结果:这些像素被完全不透明的全白色像素填充,而不是保持完全透明(因为它在其父区域之外)。这并不是说子窗口不应该被绘制,因为无论子窗口看起来如何,有问题的像素都是白色的。
下面,橙色的小子窗口沿着父窗口的边缘移动了一点。这只发生在具有透明窗口区域的边缘(因此白色像素始终被限制在父窗口的最大矩形内)。
如果父窗口被隐藏然后显示,事情会自行纠正(只是无效并强制重绘不会清除白色像素)。
这已在 Vista 和 7 上观察到。如果我禁用桌面窗口管理器 (DWM),此行为就会消失。在一种情况下,它在更新图形驱动程序后也消失了。也许它与这个问题有关?:SetWindowRgn 的 Vista 实时缩略图问题。我原本打算把它作为一个罕见的错误归档,但它的出现足以保证更多的审查。
以前有没有其他人反对过这个?关于 DWM 和窗口区域如何交互的任何见解?
另外,我知道我可以禁用每个应用程序的 DWM,但是这会在应用程序运行时禁用它,除了导致屏幕在启动和关闭时闪烁,这真的不是一个更好的问题。