以下代码如何删除窗口边框?
//note the struct is declared elsewhere, is here just for clarity.
//code is from [http://tonyobryan.com/index.php?article=9][1]
typedef struct Hints
{
unsigned long flags;
unsigned long functions;
unsigned long decorations;
long inputMode;
unsigned long status;
} Hints;
//code to remove decoration
Hints hints;
Atom property;
hints.flags = 2;
hints.decorations = 0;
property = XInternAtom(display, "_MOTIF_WM_HINTS", true);
XChangeProperty(display,window,property,property,32,PropModeReplace,(unsigned char *)&hints,5);
XMapWindow(display, window);
到目前为止,我已经知道Atom是一种类似于Window和Display的标识符,但我无法弄清楚提示结构或" _MOTIF_WM_HINTS"来自。谁能为我解释所有这些代码?先谢谢你,
答案 0 :(得分:9)
很难通过任何类型的“官方”标准或类似标准,但是 _MOTIF_WM_HINTS属性似乎来自... Motif工具包(好吧,你 猜测:-))。 请参阅the MotifZone site。
警告:接下来的内容不完整,但我希望能有所启发。
XmNmwmDecorations,XmNmwmFunctions和XmNmwmInputMode的文档 工具包的功能表明该属性是各种位掩码 用于控制外观,功能(调整大小,移动,...)和输入的值 窗口管理器应该提供/提供给窗口的模式。 请参阅man vendorshell或Oreilly Motif reference books, Vol6a chapter 16。
属性是整个X11的一部分。一个窗口可以有任意数量的窗口 在其上定义的属性。属性有一个名称,但设置/获取 属性是通过“atom”(排序标识符)完成的,以避免发送 每次获取/设置调用的线上的整个字符串。 见Properties and Atoms
当前窗口管理器(如果有)可以对window属性做出反应 通过设置适当的事件过滤器并对PropertyNotify进行操作来进行更改 事件,或者只是检查窗口在映射(或移动或其他)时所具有的属性。如果窗口管理器知道_MOTIF_WM_HINT属性,它就会 解释那些并(希望)做你想做的事。 (注意:我并不确定这个特权是否已下放到窗口中 经理,或者如果其他窗口可以收听那些“PropertyNotify”事件。不 确定这实际上与您的问题相关。)
所以只要您的窗口管理器知道,您所使用的代码就可以正常工作 关于_MOTIF_WM_HINTS属性。
你从获得原子开始 XInternAtom的(标识符/快捷方式),并通过XChangeProperty()设置其值 在通过MapWindow()实际绘制窗口之前(不确定是否会这样) 如果你在MapWindow()之后执行它,那可能取决于你的窗口 管理器)。
[编辑:将.decorations部分设置为零会清除所有装饰位,因此请求窗口管理器基本上单独留下你的边界。]
我无法想出具有该结构定义的“官方”。它在openmotif-2.3.3发行版的lib / X11 / MwmUtils.h中定义。不确定如何使用.flags条目(找不到我生活中的代码: - /)但我怀疑它用于表示你是哪个{decoration,function,inputMode}“sub-properties”作用于。 (不要相信我的话。)
作为旁注,使用_MOTIF_WM_HINTS可能不是您的最佳选择权 现在。您是否在freedesktop上查看了Extended Window Manager hints specification和其他信息/标准/草案?我打赌大多数“现代”窗口管理器/桌面环境/厨房水槽都倾向于坚持这一点,而不是保持与Motif的向后兼容性。一切都取决于我猜你编码的内容。
感谢阅读: - )