我有一个Windows C++应用程序,它可以创建两个独立的窗口
我需要能够使一个窗口临时顶部,然后稍后删除该属性,以便其他窗口可以覆盖它。
我试过这段代码:
void setWindowAlwaysOnTop(const std::string& windowTitle, bool onTop) {
HWND hwnd = FindWindowA(NULL, windowTitle.c_str());
HWND insertAfter;
if (onTop) insertAfter = HWND_TOPMOST; //set the window always-on-top
else insertAfter = HWND_BOTTOM;
SetWindowPos(hwnd, insertAfter, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
}但是,如果我以前用onTop true调用了这段代码,那么在我用onTop false调用它之后,它就不允许其他窗口覆盖目标窗口。
我也尝试过从目标窗口本身调用函数,而不是从单独的窗口调用函数,但它仍然无法工作。
就我在https://learn.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setwindowpos所能看到的而言,它应该能工作吗?
这是正确的,还是有其他方法来实现这一点?
发布于 2019-06-11 11:23:32
您在问题中提供的文档链接表明您应该将HWND_NOTOPMOST传递给hWndInsertAfter。这面旗帜上写着:
将窗口置于所有非顶部窗口之上(即,位于所有最顶层窗口后面)。如果窗口已经是非顶部窗口,则此标志无效。
https://stackoverflow.com/questions/56541903
复制相似问题