c++ - 如何从窗口中删除 TOPMOST 属性
问题描述
我有一个创建两个单独窗口的 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://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setwindowpos看到的,它应该可以工作吗?
这是正确的,还是有其他方法可以实现?
解决方案
您在问题中提供的文档链接表明您应该传递HWND_NOTOPMOST
给hWndInsertAfter
. 在这面旗帜中,它说:
将窗口放置在所有非最顶层窗口的上方(即,在所有最顶层窗口的后面)。如果窗口已经是非最顶层窗口,则此标志无效。
推荐阅读
- algorithm - 根据详细程度划分网格
- java - 在流 DF 中读取 PubsubIO 后,使用 Wait.on 写入 PubsubIO
- python - 你什么时候会在 dict.update 方法中使用键值对而不是 dict?
- apple-m1 - 苹果硅上的 libodbc.2dylib
- xml - 寻找一个脚本来修复 xml 文件中的多个结束标签
- python - 如何在 Python 中使用 base85 对文本文件进行编码和解码?
- python - 如何使用 after() 在 Tkinter 中添加随机睡眠时间
- parallel-processing - omp 部分使用私有(num_threads)子句与默认(无子句)
- django - 在 django 模型中声明外键
- javascript - 在 MVC 局部视图中使用 Bootstrap 插件的正确方法