SetWindowPos插入AFTER,而不是之前?

时间:2015-05-19 19:39:07

标签: c# winapi overlay

好的,我试图将我的表单叠加在另一个应用程序之上。现在,作为最后一步,我需要确保我的表单的z-index始终高于我覆盖的应用程序。我非常确定我需要使用SetWindowPos(https://msdn.microsoft.com/en-us/library/windows/desktop/ms633545%28v=vs.85%29.aspx)这样做,并且它有一个参数允许我设置窗口的z-index。但是,它只允许我在我试图覆盖的应用程序下将其设置为z-index。我怎样才能使用该功能覆盖应用程序呢?我所讨论的参数是hWndInsertAfter参数。

这就是我现在使用代码的方式(它代表了表单): SetWindowPos(this.Handle, clientHandle, clientTopLeft.X, clientTopLeft.Y, clientWidth, clientHeight, SWP.SHOWWINDOW);

谢谢!

2 个答案:

答案 0 :(得分:4)

啊所以答案明显很明显......我只需要使用相同的功能,但是将前两个参数反转为我的另一个应用程序的基础。

这是我使用的代码:

find_all_url

答案 1 :(得分:0)

替代方案:如果你想在 hwndB 上面插入 hwndA,那么你可以

  • 调用 hwndHigher=GetNextWindow(hwndB, GW_HWNDPREV) 找出 hwndB 之上的现有 HWND ;
  • 然后调用SetWindowPos在hwndHigher之后插入hwndA,就达到了你的目的。

一个特殊情况是 hwndHigher==NULL,这意味着 hwndB 已经在 z-order 的顶部,那么你应该用 SetWindowPos 调用 HWND_TOP 使 hwndA 在顶部。