Winapi 不正确的图形,具有重叠的同级和WM_EX_透明

Winapi 不正确的图形,具有重叠的同级和WM_EX_透明,winapi,drawing,Winapi,Drawing,我有一个问题,当一个窗口更新到另一个具有WS_EX_透明样式的窗口下方时,重叠的子窗口没有正确绘制 父窗口有两个子窗口W1和W2,它们在z顺序上重叠,W1位于W2之上。W1具有扩展样式WS_EX_TRANSPARENT。问题是,当W2在其客户区域中绘制时(我通过使W2无效来测试这一点),W2完全绘制W1的重叠部分。如果重画父对象,则将按正确顺序绘制两个重叠的子对象 在W2上设置WS_ClipSpilings并从W1中删除WS_EX_TRANSPARENT时,子窗口将正确绘制。如果W2的客户区域在

我有一个问题,当一个窗口更新到另一个具有WS_EX_透明样式的窗口下方时,重叠的子窗口没有正确绘制

父窗口有两个子窗口W1和W2,它们在z顺序上重叠,W1位于W2之上。W1具有扩展样式WS_EX_TRANSPARENT。问题是,当W2在其客户区域中绘制时(我通过使W2无效来测试这一点),W2完全绘制W1的重叠部分。如果重画父对象,则将按正确顺序绘制两个重叠的子对象

在W2上设置WS_ClipSpilings并从W1中删除WS_EX_TRANSPARENT时,子窗口将正确绘制。如果W2的客户区域在此情况下无效,则其会进行喷漆,但不会覆盖被W1遮挡的部分

之所以使用WS_EX_TRANSPARENT,是因为第一个子窗口用作第二个子窗口的覆盖,我希望避免覆盖阻止鼠标单击


有没有一种方法可以让重叠的窗口正确地使用WS\u EX\u TRANSPARENT样式绘制,或者我可以使用某种解决方法来获得相同的行为?

WS\u EX\u TRANSPARENT是不可靠的。政府有一个借口,“我们实际上不支持透明窗口”。但是没有解释操作,SDK也没有,也没有。我被咬了太多次,所以不要再用了

但我认为规则是,当上部窗口需要绘制以确保设置背景像素时,它将首先处理覆盖窗口的绘制。因此,使W1无效也会使W2无效,然后正常的Z顺序绘画会处理这些事情。忽略不可避免的闪烁问题。但反过来说,使覆盖的窗口无效不会强制为上面的窗口重新绘制。你的案子有点麻烦


不管我怎么猜测,在您的案例中,一个应该有效的修复方法是在使W2无效时也使W1无效。或者当W1与W2完全重叠时使其无效。希望能奏效,祝你好运。

谢谢你的建议,我得出了相同的结论,但我决定在透明窗口中添加一个计时器,让它自行失效。当W2重画时让W1重画需要我重写W2的窗口过程来截获WM_PAINT消息,因为它是第三方控件。