如何让儿童窗户最顶层?

时间:2010-05-13 00:22:56

标签: c++ winapi

我有一个父窗体,里面有一些子窗口(不是窗体 - 只是窗口,例如标签控件)。在某些情况下,我希望其中一个子窗口被绘制在其他子窗口的“上方”,以在整个主窗体上显示一条消息。

我已尝试在子窗口上设置HWND_TOPMOST和HWND_TOP,但它似乎根本没有任何效果。我做错了什么,或者HWND_TOPMOST和HWND_TOP只适用于表单,而不是表单中的控件吗?

感谢。

2 个答案:

答案 0 :(得分:3)

HWND_TOPMOST仅适用于顶级窗口,而不适用于子窗口。

使用带有HWND_TOP标志的SetWindowPos更改目标子窗口的zorder,将其置于其兄弟姐妹中的zorder顶部。

请注意,子窗口中的zorder仅适用于兄弟姐妹 - 具有相同父级的hwnds。

答案 1 :(得分:2)

当我想在所有子窗口顶部放置滚动条控件时,我遇到了这个问题。

我的解决方案是:

  1. 对所有子窗口使用WS_CLIPSIBLINGS。这可以防止重绘兄弟窗口的重叠区域。
  2. 在hWndInsertAfter上使用带有HWND_TOP的SetWindowPos将其置于其他控件之上。