2015-06-23 36 views
1

我很困惑XSetWMNormalHintsXSetWMSizeHints。我想設置我的窗口不可調整大小,並調用XSetWMNormalHints正確。但如果我打電話給XSetWMSizeHints,事實並非如此;該窗口仍然可以調整大小。 2功能如何用於我的目的,XSetWMSizeHints究竟做了什麼?我已經多次閱讀文檔,但我仍然感到困惑,所以在這裏問一個問題。`XSetWMNormalHints`和`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); 

回答

1

按照manual page

的XSetWMNormalHints功能取代了大小提示指定的窗口上WM_NORMAL_HINTS財產。如果該屬性尚不存在,則XSetWMNormalHints將在指定的窗口上爲WM_NORMAL_HINTS屬性設置大小提示。屬性存儲有類型WM_SIZE_HINTS的和的32

的XSetWMSizeHints函數替換所述大小的提示爲指定窗口上的指定屬性的格式。如果指定的屬性尚不存在,則XSetWMSizeHints將在指定的窗口上爲指定的屬性設置大小提示。該屬性存儲的類型爲WM_SIZE_HINTS,格式爲32.要設置窗口的正常大小提示,可以使用XSetWMNormalHints函數。

,並在一開始,它顯示

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更通用—允許您使用任何屬性—但您可能不需要一般性。

+0

我通過了'PMinSize | PMaxSize「作爲註釋掉的行中的」property「參數。我做錯了什麼? – xiver77