2008-09-16 111 views
0

我有幾個嵌套的X Windows - 比方說 - 一個可滾動窗口中的可滾動窗口(請參見下面的示例)。在這種情況下,主窗口包含(至少)主要滾動條和它們控制的(主要)繪圖區域。該繪圖區域包含(至少)一個可滾動窗口批處理 - 一個(次要)主窗口,其中包含一個滾動條和一個小繪圖區。如何在X Windows/Linux中確定Windows的可見區域?

在實時滾動內部繪圖區的過程中,重繪過程會混淆,因爲我使用XCopyArea來加速進程並移動有效的內容,併爲新出現的內容調用實際的重繪例程。當內部繪圖批次本身是可以正常工作的,但是當嵌套在另一個內部時會出現問題 - 當內部滾動部分可見時(即主要繪圖區域被滾動),重新繪製新出現的內容將從主要繪製區域並且從未實際重繪,但被認爲是如此。當在下一次滾動時XCopyArea得到這個據稱重繪區域,它實際上是空的。最後,這個空白區域顯示在部分可見的內部滾動批次上,並且是空的。在第一個一般的重繪消息中,它們是固定的。

如果我可以從(我的)內部繪圖區域獲得實際可見的剪貼蒙版,我可以調整XCopyArea()調用和重畫調用,並在沒有重繪所有內容的計劃「B」的情況下解決問題每個滾動條的移動。

示例:爲Mozilla Firefox開發插件,並需要確定描述「我的」窗口可見區域的區域,即從Mozilla系統作爲插件視口傳遞的區域。

+0

是的,它是從NSAPI調用傳遞的一個窗口,但在插件實際工作的單獨(子)過程中使用。 XGetWindowAttributes給出了信息,但不是該窗口是否被覆蓋,或者 - 最重要的是 - 向下滾動並且部分可見,這就是我所需要的。 – theJonan 2008-09-16 21:37:38

回答

1

如果它真的是一個X Window,而不是某個特定工具包的widget(比如GTK +也許?),那麼你可以使用XGetWindowAttributes函數調用。

這填寫了一個提供的XWindowAttributes結構,其中包括窗口x和y位置的整數以及寬度和高度以及其他有用的事實。

但實際上我認爲你可能使用的是從Netscape繼承的Mozilla插件API,也就是NSAPI,在這種情況下,你得到的是至少一次調用函數NPP_SetWindow()(如果需要,更改)與包含您正在尋找的信息的結構。嘗試查看http://www.mozilla.org/projects/plugins/以獲取有關您應該使用的API的更多信息。

相關問題