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 会把所有它应该做的事情做的周全。