我们假设在软件中打开了几个不同的Windows(CWnd
),并且所有活动窗口的指针都保存在std::vector<Node> tabsInfo
中。以下是Node
的部分代码:
struct typedef Node {
...
CWnd *pWnd;
...
}
我有一个处理程序来使用tabsInfo
更新所有活动窗口的Z顺序,如下所示:
for (size_t i = tabsInfo.size(); i > 1; i--) {
Node *pN_cur = &tabsInfo.at(i - 1);
Node *pN_next = &tabsInfo.at(i - 2);
ret = pN_cur->pWnd->SetWindowPos(pN_next->pWnd, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
ASSERT(ret != 0); // Sanity check
}
但是,当我调试它们时,即使它们运行没有错误,它也不会改变所有窗口的顺序。
我是否误解了如何使用SetWindowPos
?
当我看到其他问题得到解答时(处理对话框中的按钮而不是窗口),他们给出了类似的解决方案,但它似乎无法在这里工作。
答案 0 :(得分:0)
对于遇到同样问题的人,我添加了几行,并且有效:
for (int i = tabsInfo.size() - 1; i >= 0; i--) {
Window_Node *pWN = &tabsInfo.at(i);
if (tabsInfo.at(i).checked) { // Ignore this line. This is program-specific
WINDOWPLACEMENT wp = {};
wp.length = sizeof(WINDOWPLACEMENT);
pWN->pWnd->GetParentFrame()->GetWindowPlacement(&wp);
wp.showCmd=SW_RESTORE;
pWN->pWnd->GetParentFrame()->SetWindowPlacement(&wp);
ret = pWN->pWnd->GetParentFrame()->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
ASSERT (ret != 0);
} else {
pWN->pWnd->GetParentFrame()->ShowWindow(SW_MINIMIZE);
}
}
}
希望它可以帮助某人:)