0

我有几个嵌套的 X 窗口 - 比方说 - 可滚动窗口中的可滚动窗口(参见下面的示例)。在这种情况下,主窗口包含(至少)主要滚动条和它们控制的(主要)绘图区域。该绘图区域轮流包含(至少)一个可滚动窗口批处理 - 一个(次要)主窗口,包含一个滚动条和次要绘图区域。

在内部绘图区域的实时滚动期间,重绘过程搞砸了,因为我正在使用 XCopyArea 来加速该过程并移动有效的内容并为新出现的内容调用实际的重绘例程。当内部绘图批处理本身时,这可以正常工作,但是当嵌套在另一个绘图批处理中时会出现问题 - 当内部滚动批处理部分可见(即主要绘图区域被滚动)时,重新绘制新出现的内容会从主要内容中剪裁绘图区域并从未实际重绘,但认为是这样。当在下一次滚动时,XCopyArea 得到这个所谓的重绘区域,它实际上是空的。最后这个空白区域出现在部分可见的内部滚动批次上,它是空的。在第一个一般重绘消息中,它们是固定的。

如果我可以获得从(我的)内部绘图区域实际可见的剪贴蒙版,我可以调整 XCopyArea() 调用和重绘调用,并在没有计划“B”的情况下克服问题,该计划在每个滚动条移动时重绘所有内容.

示例:为 Mozilla Firefox 开发一个插件,需要确定描述“我的”窗口可见区域的区域,即从 Mozilla 系统作为插件视口传递的区域。

4

1 回答 1

1

如果它真的是您获得的 X Window,而不是来自某些特定工具包的小部件(可能像 GTK+?),那么您可以使用 XGetWindowAttributes 函数调用。

这填写了一个提供的 XWindowAttributes 结构,其中包括窗口的 x 和 y 位置的整数以及它的宽度和高度以及其他有用的事实。

但实际上,我认为您可能正在使用从 Netscape 继承的 Mozilla 插件 API,也就是 NSAPI,在这种情况下,您得到的是对您的函数 NPP_SetWindow() 的调用至少一次(如果有必要,再次调用,因为发生了一些变化)包含您要查找的信息的结构。尝试查看http://www.mozilla.org/projects/plugins/以获取有关您应该使用的 API 的更多信息。

于 2008-09-16T16:34:44.827 回答