如何使子窗口位于最顶层?

Posted

技术标签:

【中文标题】如何使子窗口位于最顶层?【英文标题】:How can I make a child window topmost? 【发布时间】:2010-05-13 00:22:56 【问题描述】:

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

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

谢谢。

【问题讨论】:

【参考方案1】:

HWND_TOPMOST 仅适用于***窗口,不适用于子窗口。

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

请注意,子窗口中的 zorder 仅适用于同级窗口 - 具有相同父级的 hwnd。

【讨论】:

【参考方案2】:

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

我的解决方案是:

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

【讨论】:

以上是关于如何使子窗口位于最顶层?的主要内容,如果未能解决你的问题,请参考以下文章

[Qt] 组件

如何使子进程窗口在我的进程中显示为模态?

Java SWing中如何通过双击使子对话框从父窗口中弹出并嵌入到父窗口中?

什么时候在窗口上设置最顶层不起作用?

201403-2 - 窗口

201403-2 窗口