我有幾個嵌套的X Windows - 比方說 - 一個可滾動窗口中的可滾動窗口(請參見下面的示例)。在這種情況下,主窗口包含(至少)主要滾動條和它們控制的(主要)繪圖區域。該繪圖區域包含(至少)一個可滾動窗口批處理 - 一個(次要)主窗口,其中包含一個滾動條和一個小繪圖區。如何在X Windows/Linux中確定Windows的可見區域?
在實時滾動內部繪圖區的過程中,重繪過程會混淆,因爲我使用XCopyArea來加速進程並移動有效的內容,併爲新出現的內容調用實際的重繪例程。當內部繪圖批次本身是可以正常工作的,但是當嵌套在另一個內部時會出現問題 - 當內部滾動部分可見時(即主要繪圖區域被滾動),重新繪製新出現的內容將從主要繪製區域並且從未實際重繪,但被認爲是如此。當在下一次滾動時XCopyArea得到這個據稱重繪區域,它實際上是空的。最後,這個空白區域顯示在部分可見的內部滾動批次上,並且是空的。在第一個一般的重繪消息中,它們是固定的。
如果我可以從(我的)內部繪圖區域獲得實際可見的剪貼蒙版,我可以調整XCopyArea()調用和重畫調用,並在沒有重繪所有內容的計劃「B」的情況下解決問題每個滾動條的移動。
示例:爲Mozilla Firefox開發插件,並需要確定描述「我的」窗口可見區域的區域,即從Mozilla系統作爲插件視口傳遞的區域。
是的,它是從NSAPI調用傳遞的一個窗口,但在插件實際工作的單獨(子)過程中使用。 XGetWindowAttributes給出了信息,但不是該窗口是否被覆蓋,或者 - 最重要的是 - 向下滾動並且部分可見,這就是我所需要的。 – theJonan 2008-09-16 21:37:38