使用分层窗口时,窗口下面没有被绘制

时间:2010-05-16 21:10:55

标签: c++ windows mfc winapi

我会尽力解释我的问题,

我正在用c ++创建一个分层窗口(使用windowsXP),一切正常,直到我将创建的窗口拖到Windows开始按钮附近,然后当我按下Windows任务栏的星形按钮并再次关闭所有窗口我的分层窗口下面没有被绘制(仅在窗口上弹出的开始窗口区域)。

我的创建窗口是这样的:

  

CWnd :: CreateEx(WS_EX_TOOLWINDOW |   WS_EX_LAYERED,     AfxRegisterWndClass(0),     lpstr_name,WS_POPUP,0,0,0,0,     pc_parent-> GetSafeHwnd(),0);

...

当我使用这种样式创建窗口时,问题就会出现问题,但是如果我使用扩展样式WS_EX_TRANSPARENT和所有其他样式创建,则不再出现问题。如果WS_CHILD或WS_OVERLAPPED代替WS_POPUP窗口,那么这也不会发生......

任何人都可以解释为什么当我创建一个WS_EX_LAYERED样式的WS_POPUP窗口时,所有下面的窗口都没有更新,如果我添加样式WS_EX_TRANSPARENT,这可以正常工作。

注意:为什么我不使用WS_EX_TRANSPARENT样式,如果它正常工作?如果我使用它然后我的窗口不能被拖动,我需要它来做它:)

更新: alt text http://img17.imageshack.us/img17/586/clipboard01il.jpg

上面的图片是为了更好地描述发生的事情: 图像的第一部分,你可以看到我的层次窗口和下面是vs,在第二个img我按下开始按钮,然后在最后一个图像我已经将我的分层窗口拖到右边,你可以看到vs窗口不会更新受影响的区域。 请注意,直到现在这种情况只发生在启动窗口?!与其他窗户不会发生!?...

由于

1 个答案:

答案 0 :(得分:0)

  

仅在弹出窗口的开始窗口区域

这是预期的。开始菜单仅遮挡该剪切矩形,因此仅重绘该区域。你期待什么行为?如果有更多上层窗户覆盖的窗户,那么它们也不会被重新绘制 - 为什么要重新涂抹一些东西只是为了涂抹它?

如果使用透明的话,所有下面的窗口都需要重新绘制,因为GDI无法在不知道窗口颜色下面的区域的情况下计算像素的最终颜色。