【发布时间】:2011-03-17 23:24:41
【问题描述】:
场景是我有一个顶级窗口的窗口句柄列表,我想移动它们,以便它们按照我选择的 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);
我确定这是我在这里遗漏的一些小东西/很明显,但我只是没有看到它。
【问题讨论】: