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);
谢谢!
啊,所以答案是显而易见的…我只需要使用相同的函数,但将前两个参数颠倒,以使其他应用程序置于我的应用程序之下。
这是我使用的代码:
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在顶部。