gpt4 book ai didi

c++ - XLib - 当我在主函数中构造 XWindowAttributes 时,窗口提示的行为有所不同?

转载 作者:行者123 更新时间:2023-11-28 06:37:17 25 4
gpt4 key购买 nike

我正在试验一些基本的 Xlib 内容。我正在创建一个基本窗口并为其创建一个 OpenGL 上下文。

我试图阻止用户调整窗口大小或手动全屏显示窗口。我添加了代码:

XSizeHints hints;
hints.min_width = hints.max_width = setup.w;
hints.min_height = hints.max_height = setup.h;
XSetWMNormalHints(dpy, win, &hints);

这起初有效。然而,在试验之后,我发现它有时会莫名其妙地停止工作。这不是不寻常的窗口管理器或类似的问题,我使用的是随 Ubuntu 安装的默认窗口管理器。奇怪的是,导致它发生变化的是我是否在 main 中包含了这一行:

XWindowAttributes atts;

我把它放在哪里并不重要。在开头,或在循环内,甚至在返回之后。只要我把它放在 main 的某个地方,提示就会阻止调整大小(只是为了清楚起见,变量的任何名称都有效)。我是否使用它并不重要,它最初用于调用 XGetWindowAttributes。当我尝试将其移动到单独的函数调用中时,我发现了问题。如果我把它拿出来,窗口会有一个全屏按钮,我就可以缩小它。我尝试过在其他地方声明变量,例如在我包含 Window 和 GLXContext 的结构中。

这是怎么回事?我的看法是我的虚拟机有一个非常微妙和不寻常的错误或类似的奇怪错误,或者我错过了一些明显的信息。任何人都可以阐明这一点吗?

最佳答案

好吧,我无法解释为什么在 main 中声明 XWindowAttributes 实例会使其正常工作,但我确实弄清楚了我的代码有什么问题,并且在进行以下更改后我能够使其按预期运行:

  1. 不要像上图那样直接创建 XSizeHints。创建如下:

    XSizeHints *hints = XAllocSizeHints();
  2. 在指定使用哪些变量的对象中设置标志:

    hints->flags = PMinSize|PMaxSize;
  3. 使用 XSetWMNormalHints 和 XSetWMSizeHints:

    XSetWMNormalHints(dpy, win, hints);
    XSetWMSizeHints(dpy, win, hints, PMinSize|PMaxSize);

我还在包含窗口数据的结构中放置了一个指向提示的指针。上面的代码全部变成了:

XSizeHints *hints = wind->hints = XAllocSizeHints();
hints->flags = PMinSize|PMaxSize;
hints->min_width = hints->max_width = setup.w;
hints->min_height = hints->max_height = setup.h;
XSetWMNormalHints(dpy, win, hints);
XSetWMSizeHints(dpy, win, hints, PMinSize|PMaxSize);

关于c++ - XLib - 当我在主函数中构造 XWindowAttributes 时,窗口提示的行为有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26580637/

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