X Window 的 Resize 处理
程序员在陌生领域工作时,都想寻求范例。看起来,我们都很依赖 Meme Machine 。
可惜的是, X Window 领域的直接针对 XLib 编程的范例太少。偶尔碰到点问题都让人很痛苦。只有反复研究文档了。
我的程序在处理 Resize 消息时老是不正确,仔细阅读文档后,发现是以前理解有问题。
起先,我为窗口消息注册了 ResizeRedirectMask ,然后在消息循环中就可以得到一个 ResizeRequest 消息。然后,我处理这个消息,但结果总是不对。
今天研究了一下,发现 ResizeRedirectMask 会导致 no further processing is performed 。也就是说,通知你 resize 请求后,X 系统就不管你了。至于还差什么事情要做(比如改变客户区大小),我也不知道该怎么做才完全正确。(如果在 Windows 里,应该是调用 DefaultWindowProc )
不过解决方法其实也很简单,不用注册 ResizeRedirectMask ,而注册 StructureNotifyMask 。在窗口改变的时候, X 会发一个 ConfigureNotify 。因为这个只是 Notify ,所以 X 会把所有它应该做的事情做的周全。
btw, Sean 同学推荐我用一下 XCB ,因为 XLib 用起来实在是太头痛了。这是个替代物。
Comments
Posted by: 元谷 | (6) November 8, 2011 12:54 PM
Posted by: donkeyji | (5) May 22, 2009 09:17 AM
Posted by: zu | (4) May 21, 2009 05:50 PM
Posted by: chu | (3) May 21, 2009 11:34 AM
Posted by: NeverRain | (2) May 21, 2009 10:44 AM
Posted by: sync | (1) May 21, 2009 01:48 AM