2008-09-16 67 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的更多信息。

相关问题