以编程方式将一个窗口始终置于另一个窗口之上
Keep one window always on top of another programatically
我有一个(非商业)程序,它创建了两个窗口,一个显示滚动文本,您可以在其中输入以发出命令。另一个显示各种复杂图形以响应这些命令。图形信息是如此详细和复杂,它需要占用整个大显示器。我通常把文本窗口放在第二个显示器上,所以从来没有考虑过哪个窗口是"在上面"。
我现在想让一个(非技术的)朋友使用我的程序,他想让它在一个显示器上工作。我想做的是将(小)文本窗口放置在图形窗口的一个角落的顶部,但以某种方式安排文本窗口保持在图形窗口的顶部,即使图形窗口被选中。这可以做到吗?如果可以,如何做到?
让您希望放在顶部的窗口由另一个窗口拥有。自己拥有的窗户总是比它的主人高。文档说:
拥有Windows
一个重叠的或弹出的窗口可以被另一个重叠的或弹出窗口。被拥有会对窗口施加一些约束。
- 一个被拥有的窗口总是在它的所有者的z轴上。
- 当窗体的所有者被销毁时,系统会自动销毁该窗体。
- 当其所有者最小化时,已拥有的窗口将被隐藏。
只有重叠或弹出的窗口可以是所有者窗口;一个孩子窗口不能是所有者窗口。应用程序创建一个拥有的通过将所有者的窗口句柄指定为hwndParent参数创建窗口时使用WS_OVERLAPPED或WS_POPUP样式。hwndParent参数必须确定重叠窗口或弹出窗口。如果hwndParent标识一个子窗口时,系统将所有权分配给顶级父窗口子窗口的窗口。创建一个自有窗口后应用程序无法将窗口的所有权转移到另一个窗口。
对话框和消息框是默认拥有的窗口。一个应用程序在调用函数时指定所有者窗口创建对话框或消息框。
应用程序可以使用带有GW_OWNER标志的getwwindow函数获取窗口所有者的句柄。
因此,使用CreateWindowEx
的hWndParent
参数指定窗口的所有者。文档有点难以理解。它说:
hWndParent [in, optional]
正在创建的窗口的父窗口或所有者窗口的句柄。要创建子窗口或自有窗口,请提供有效的窗口句柄。
可选参数。
这意味着形参被重载了。对于弹出窗口,此参数指定所有者。当您希望创建一个无主窗口时,通过NULL
。这就是该参数对于弹出窗口是可选的意思。对于子窗口,在此参数中传递窗口的父窗口。
现在,在您的示例中,您想要创建一个自有的弹出窗口,因此在此参数中传递所有者。
您可以将图形窗口设置为所有者。这是与子窗口的父参数相同的CreateWindow
参数。我可以建议你也提供一些方法,使文本窗口或多或少透明。
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 如何将一个窗口保留在另一个应用程序窗口的前面
- Qt:从另一个窗口访问公共对象
- 触发另一个窗口的菜单按钮
- 如何在Qt中管理另一个窗口?
- 将变量从主窗口传递到另一个qt c++窗体
- Gtkmm - 关闭窗口然后显示另一个窗口的正确方法
- 当电子的窗口隐藏时如何激活另一个应用程序窗口
- 发送到另一个窗口的鼠标移动消息不执行任何操作
- xcb_get_image_reply另一个工作区/桌面上的窗口失败
- C++ 从另一个程序窗口的内存中编辑文本
- 在另一个C 程序的窗口中打开.exe
- 将窗口句柄从一个进程使用到另一个进程(插件 vst 音频)
- Win32/Gdigrab - 如何将另一个进程窗口设置为无边框
- 无法更改另一个窗口内窗口的背景颜色
- 更改如何从另一个窗口从Mainwindow接收信号
- 将文件从一个位置移至窗口C 的另一个位置
- 使用启动命令启动命令时,将命令传递到另一个 cmd 窗口
- 如何在没有窗口类的情况下编写QT系统托盘应用程序,并将其与另一个进程集成
- 具有两个窗口的C++中的应用程序.任务栏中显示的一个窗口.另一个未显示