settwindowpos插入AFTER,而不是before

本文关键字:before 插入 AFTER settwindowpos | 更新日期: 2023-09-27 17:49:55

好的,我想把我的表单叠加在另一个应用程序上。现在,作为最后一步,我需要确保我的表单的z-index总是在我所覆盖的应用程序之上。我很确定我需要使用SetWindowPos (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633545%28v=vs.85%29.aspx)来做到这一点,它有一个参数,允许我设置窗口的z索引。但是,它只允许我在我试图覆盖的应用程序下将其设置为z-index。我如何使用函数来覆盖应用程序呢?我所说的参数是hWndInsertAfter参数。

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

谢谢!

settwindowpos插入AFTER,而不是before

啊,所以答案是显而易见的…我只需要使用相同的函数,但将前两个参数颠倒,以使其他应用程序置于我的应用程序之下。

这是我使用的代码:

SetWindowPos(this.Handle, IntPtr.Zero, clientTopLeft.X, clientTopLeft.Y, clientWidth, clientHeight, SWP.SHOWWINDOW);
SetWindowPos(clientHandle, this.Handle, 0, 0, 0, 0, SWP.NOMOVE | SWP.NOSIZE);

可选:如果您想将hwndA插入hwndB之上,则可以

  • 调用hwndHigher=GetNextWindow(hwndB, GW_HWNDPREV)查找hwndB以上的现有HWND;
  • 然后调用SetWindowPos在hwndHigher之后插入hwndA,您的目标就实现了。

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