我有一个(非商业)程序,它创建了两个窗口,一个显示滚动文本,您键入它们以发出命令。另一个显示响应这些命令的各种复杂图形。图形信息非常复杂,需要占用整个大型监视器。我通常将文本窗口放在第二个显示器上,这样就不会想到哪个窗口在“顶部”。
我现在希望让(非技术性)朋友能够使用我的程序,并希望它能够在单个监视器上工作。我想做的是将(小)文本窗口放置在一个角落的图形窗口顶部,但不知何故安排文本窗口保持在图形窗口的顶部,即使选择了图形窗口。可以这样做,如果是这样的话?
答案 0 :(得分:3)
使您希望位于顶部的窗口归其他窗口所有。拥有的窗口始终高于其所有者。 documentation说:
拥有Windows
重叠或弹出窗口可以由另一个重叠或拥有 弹出窗口。拥有在窗口上设置了几个约束。
- 拥有的窗口始终位于z订单的所有者之上。
- 系统会在其所有者被销毁时自动销毁拥有的窗口。
- 拥有的窗口在其所有者最小化时隐藏。
只有重叠或弹出窗口才能成为所有者窗口;一个孩子 窗口不能是所有者窗口。应用程序创建一个拥有 窗口通过将所有者的窗口句柄指定为hwndParent CreateWindowEx创建窗口时的参数 WS_OVERLAPPED或WS_POPUP样式。 hwndParent参数必须 识别重叠或弹出窗口。如果hwndParent标识一个 子窗口,系统将所有权分配给顶级父级 儿童窗口的窗口。创建一个拥有的窗口后,一个 应用程序无法将窗口的所有权转移到另一个窗口。
默认情况下,对话框和消息框是拥有的窗口。一个 应用程序在调用函数时指定所有者窗口 创建一个对话框或消息框。
应用程序可以将GetWindow函数与GW_OWNER标志一起使用 检索窗口所有者的句柄。
因此,请指定CreateWindowEx
NULL
个UserCreated
参数的窗口的所有者。文档有点难以理解。它说:
hWndParent [in,optional]
正在创建的窗口的父窗口或所有者窗口的句柄。要创建子窗口或拥有的窗口,请提供有效的窗口句柄。此参数对于弹出窗口是可选的。
这样做会导致参数过载。对于弹出窗口,此参数指定所有者。当你想创建一个无主的窗口传递<?php
namespace SimplyTimesheets\Listeners\User;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Repos\User\UserRepoInterface;
use App\Repos\User\RoleRepoInterface;
class AssignRole
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct(UserRepoInterface $user, RoleRepoInterface $role)
{
$this->user = $user;
$this->role = $role;
}
/**
* Handle the event.
*
* @param $event
* @return void
*/
public function handle($event)
{
$user = $this->user->findUserById($event->user->id);
$role = $this->role->findRoleById($event->request->role_id);
return $user->roles()->save($role, ['cust_id' => $event->user->cust_id]);
}
}
时。这就是弹出窗口可选参数的含义。对于子窗口,您可以在此参数中传递窗口的父窗口。
现在,在您的情况下,您想要创建一个拥有的弹出窗口,因此在此参数中传递所有者。
答案 1 :(得分:2)
您只需将图形窗口设置为所有者即可。这是与子窗口的父级相同的hWndParent
参数。我建议您还提供一些方法使文本窗口或多或少透明。