Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ `XSetWMNormalHints`和XSetWMSizeHints`_C++_C_X11_Xlib - Fatal编程技术网

C++ `XSetWMNormalHints`和XSetWMSizeHints`

C++ `XSetWMNormalHints`和XSetWMSizeHints`,c++,c,x11,xlib,C++,C,X11,Xlib,我对XSetWMNormalHints和xsetwmizehints感到困惑。我想将窗口设置为不可调整大小,对XSetWMNormalHints的调用可以正确地执行此操作。但是如果我调用xsetwmsizehits,实际上什么都不会发生;窗口仍然可以调整大小。这两个函数是如何用于我的目的的,以及XSetWMSizeHints到底做了什么?我已经阅读了很多次文档,但是我仍然感到困惑,所以在这里问一个问题 sh = XAllocSizeHints(); sh->flags = PMinSize

我对
XSetWMNormalHints
xsetwmizehints
感到困惑。我想将窗口设置为不可调整大小,对
XSetWMNormalHints
的调用可以正确地执行此操作。但是如果我调用
xsetwmsizehits
,实际上什么都不会发生;窗口仍然可以调整大小。这两个函数是如何用于我的目的的,以及
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);
根据报告:

XSetWMNormalHints函数替换指定窗口上的WM_NORMAL_hints属性的大小提示。如果该属性不存在,XSetWMNormalHints将为指定窗口上的WM_NORMAL_hints属性设置大小提示。该属性以WM_SIZE_提示类型和32格式存储

XSetwmSizeHitts函数将替换命名窗口上指定属性的大小提示。如果指定的属性不存在,XSetwMsizeHights将为命名窗口上的指定属性设置大小提示。该属性以WM_SIZE_提示类型和32格式存储。要设置窗口的正常大小提示,可以使用XSetWMNormalHints函数

一开始,它显示了

void XSetWMSizeHints(Display *display, Window w, XSizeHints *hints, Atom property); 
在注释掉的片段中,它不使用属性(似乎不起作用)。X11原子(请参阅)是与C指针类似的标识符(但实际上不是地址),而
PMinSize | pmaxize
则完全不同:设置了特定位的值。编译器接受它,因为两者都是无符号值,但在运行时,该值可能与任何Atom标识符都不匹配


XSetWMNormalHints
是更有用的函数,因为它更新了您通常会使用的属性:
WM\u NORMAL\u HINTS
xsetwmsizehits
更为通用,允许您使用任何属性,但您可能不需要通用性。

这个问题已经提出了将近4年,但这可能会为其他类似问题的人澄清

使用WM_NORMAL_HINTS属性调用XSetWMSizeHints与XSetWMNormalHints执行相同的操作。调用xsetwmsizehits的问题在于“PminSize | PMaxSize”是一个值而不是一个属性。下面是经过修改的代码,它使用带有属性的XSetWMSizeHints

#include <X11/Xatom.h>  // XA_WM_NORMAL_HINTS
...
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, XA_WM_NORMAL_HINTS);
XFree(sh);
#包括//XA_WM_NORMAL_提示
...
sh=XAllocSizeHints();
sh->flags=pmensize | pmaxize;
sh->最小宽度=sh->最大宽度=100;
sh->最小高度=sh->最大高度=100;
//XSetWMNormalHints(d、w、sh);
XSetwmSizeTipts(d、w、sh、XA_WM_NORMAL_提示);
XFree(sh);

我将
pmansize | PMaxSize
作为注释行中的
属性
参数传递。我做错了什么?欢迎来到堆栈溢出!请格式化您的答案,使其可读。