场景是我有一个顶级窗口的窗口句柄列表,我想移动它们,以便它们按照我选择的 z 顺序排列。我从迭代列表开始(我希望最后的窗口位于顶部),调用SetForegroundWindow
每个列表。这似乎在某些时候有效,但并非总是如此,当我在每次通话之间稍作停顿时会有所改善。
有一个更好的方法吗?
编辑:
看起来BeginDeferWindowPos
//路线是要走的路DeferWindowPos
。EndDeferWindowPos
但是,我似乎无法一次使用多个窗口。当我将窗口列表限制为单个窗口时,它可以正常工作。当列表有多个窗口时,它似乎只得到其中一个。这是我正在做的伪代码:
HWND[] windows;
HWND lastWindowHandle = 0;
HDWP positionStructure = BeginDeferWindowPos(windows.length);
for (int i = 0; i < windows.length; i++)
{
positionStructure = DeferWindowPos(positionStructure, windows[i],
lastWindowHandle, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
EndDeferWindowPos(positionStructure);
我确定这是我在这里遗漏的一些小/明显的东西,但我只是没有看到它。