gpt4 book ai didi

c - 如何让X11窗口跨越多个显示器

转载 作者:太空狗 更新时间:2023-10-29 15:05:57 32 4
gpt4 key购买 nike

我正在尝试使用 XResizeWindow() 制作一个跨越 2 个显示器的窗口,但是 ?window manager?将其限制为一个。

是否有提示或属性可以与窗口相关联以告诉 WM 不要限制它?

对于我的测试用例,我有两个 1600x1200 显示器,nVidia 将它们作为一个 3200x1200 屏幕呈现给 KDE4。 XDisplayWidth(显示, 0);返回 3200 和 XDisplayHeight(display, 0);返回 1200。

当我打电话

XCreateWindow(display, DefaultRootWindow(display),
220, 0, 1700, 930,
1, DefaultDepth(display,screen),
InputOutput, CopyFromParent,
CWCursor, &attributes);

对于 220,0 处的 1700x930 窗口,我在 0,0 处得到一个 1593x930 的窗口,将其完全保留在左侧监视器上。任何大于它的 XResizeWindow 都会缩小到 1593。(我假设这 7 个像素是窗口装饰,这很好。)

但是,如果我然后 XMoveWindow(display, win, 800, 0),它将移动窗口以横跨屏幕,然后我可以将它放大到 3200 宽(减去几个像素)。

有什么我可以告诉窗口管理器或执行此操作的人,不要将窗口限制为单个显示器,而是让我使用整个屏幕?

谢谢!

%xrandr -q --verbose
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 3200 x 1200, current 3200 x 1200, maximum 3200 x 1200
default connected 3200x1200+0+0 (0x161) normal (normal) 0mm x 0mm
Identifier: 0x160
Timestamp: 64409661
Subpixel: unknown
Clones:
CRTC: 0
CRTCs: 0
Transform: 1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
filter:
3200x1200 (0x161) 192.0MHz *current
h: width 3200 start 0 end 0 total 3200 skew 0 clock 60.0KHz
v: height 1200 start 0 end 0 total 1200 clock 50.0Hz

最佳答案

一般来说,应用程序不应试图严格控制其窗口大小和位置,因为 WM 应该是智能的并且以尽可能最佳的方式放置窗口。如果您仍然想要控制,请尝试像这样使用 XSizeHints:

XSizeHints sh;
sh.width = sh.min_width = 1700;
sh.height = sh.min_height = 930;
sh.h = 220;
sh.y = 0;
sh.flags = PSize | PMinSize | PPosition;
XSetWMNormalHints(dpy, win, &sh);
XMapWindow(dpy, win);

WMs 将遵守 min_width 并且不会将窗口缩小到比这更小。

如果您需要一个跨多个监视器的全屏窗口,则可以使用 _NET_WM_FULLSCREEN_MONITORS 属性以不同的方式完成。参见 here .

关于c - 如何让X11窗口跨越多个显示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17114738/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com