我对XSetWMNormalHintsXSetWMSizeHints感到困惑。我想将窗口设置为不可调整大小,并且调用XSetWMNormalHints可以正确执行此操作。但是,如果我改为调用XSetWMSizeHints,则什么也没有发生。窗口仍可调整大小。这两个函数如何用于我的目的,XSetWMSizeHints到底做什么?我已经阅读了多次文档,但是我仍然很困惑,所以在这里问一个问题。

sh = XAllocSizeHints();
sh->flags = PMinSize | PMaxSize;
sh->min_width = sh->max_width = 100;
sh->min_height = sh->max_height = 100;
XSetWMNormalHints(d, w, sh);
//XSetWMSizeHints(d, w, sh, PMinSize | PMaxSize);
XFree(sh);

最佳答案

根据manual page:







在开始时,它显示

void XSetWMSizeHints(Display *display, Window w, XSizeHints *hints, Atom property);

在您注释掉的片段中,它不使用属性(似乎不起作用)。 X11原子(请参阅Xlib Programming Manual: Properties and Atoms)是类似于C指针的标识符(但实际上不是地址),而PMinSize | PMaxSize则完全不同:设置了特定位的值。编译器接受了它,因为它们都是无符号值,但是在运行时,该值可能与任何Atom标识符都不匹配。
XSetWMNormalHints在功能中更有用,因为它会更新通常使用的属性:WM_NORMAL_HINTSXSetWMSizeHints更为通用-允许您使用任何属性-但您可能不需要通用性。

关于c++ - `XSetWMNormalHints`和`XSetWMSizeHints`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30994485/

10-12 14:47