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
参数,谢谢您的建议。