Winapi 将窗口z顺序设置为高于其他窗口

Winapi 将窗口z顺序设置为高于其他窗口,winapi,Winapi,我在另一个上面做一些不可见的重叠窗口。我知道SetWindowPos(),但它只设置在另一个的下面 我需要一种方法来不断更新窗口的位置,使其保持在正上方,因此,如果窗口返回,覆盖层将一起移动。 创建另一个窗口的覆盖子窗口没有帮助,因为另一个窗口有一些渲染内容,覆盖窗口开始闪烁。使用 SetWindowPos(window, GetNextWindow(below, GW_HWNDPREV), 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE

我在另一个上面做一些不可见的重叠窗口。我知道
SetWindowPos()
,但它只设置在另一个的下面

我需要一种方法来不断更新窗口的位置,使其保持在正上方,因此,如果窗口返回,覆盖层将一起移动。 创建另一个窗口的覆盖子窗口没有帮助,因为另一个窗口有一些渲染内容,覆盖窗口开始闪烁。

使用

SetWindowPos(window, GetNextWindow(below, GW_HWNDPREV), 0, 0, 0, 0,
             SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);

要将一个
窗口放置在
的上方或下方
的上方,覆盖窗口不需要是另一个窗口的子窗口,但另一个窗口应该是,这样覆盖窗口就不能位于另一个窗口的后面。您不必担心管理z顺序。只需截取另一个窗口的移动并重新定位覆盖。如果两个窗口处于同一进程中,请使用
SetWindowSubclass()
处理
WM\u WINDOWPOSCHANGING
/
WM\u WINDOWPOSCHANGED
消息,否则使用
SetWinEventHook()
处理
事件对象位置更改
事件。噢,谢谢。工作完美无瑕!但我必须在创建窗口后更改所有者,所以我使用SetWindowLong(owned,GWL_HWNDPARENT,owner),请注意,从技术上讲,
SetWindowLong(GWL_HWNDPARENT)
不受官方支持(甚至没有文档记录),即使它“有效”。设置所有者的唯一官方方法是使用
CreateWindow/Ex()
hWndParent
参数,谢谢您的建议。