2010-05-16 132 views
0

时,我会尽量解释我的问题尽我所能,窗户被涂使用分层窗口

我创建一个在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);

...

当我创建这个风格问题ocurrs窗口,但如果我与扩展样式WS_EX_TRANSPARENT创建和所有其他人不发生任何更多的问题。如果不是WS_POPUP窗口是WS_CHILD或WS_OVERLAPPED那么这也不会发生...

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

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

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

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

感谢

回答

0

只在弹出了我的窗口

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

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

+0

是的,当然,但我怎么做到这一点。我希望所有窗口下面的窗口应该被通知绘画更新,我不希望我的应用程序是将绘制窗口下方的应用程序,我期望系统会发送某种消息,以便让它知道下面的窗口必须重绘是自己的内容。 我觉得你不明白我的问题,我只想知道女巫风格或扩展样式允许这种情况发生。 – Nuno 2010-05-17 14:07:23

+0

@Nuno:为什么基础窗口重绘?他们之上有一个窗口!无论他们画的是什么,当最顶层的窗口重新绘制时,都会被吹走。 – 2010-05-17 14:17:44

+0

正确的理解,但我能做些什么来避免这种情况? (我更新了问题并添加了一个图像,就像你看到的那样,底层窗口需要重绘或不重视!)注意,如果我添加了WS_EX_TRANSPARENT扩展样式,这将不会发生......这是我需要的,但是这种风格我不能拖动我的窗口,因为它会被点击 – Nuno 2010-05-17 14:28:36