【发布时间】:2019-06-03 14:56:36
【问题描述】:
我正在使用 X11、Xt 和 Motif 直接使用 C 编写应用程序。我希望能够列出父窗口中的所有子窗口小部件。有没有办法做到这一点?
我发现以下 sn-p 递归解析 Motif 小部件树 here,但我只有一个 Xlib Window 结构,所以我希望能够获取该窗口的子小部件,然后将该小部件传递给某物类似于递归树解析器。
我当前的代码如下所示:
int main() {
Display* display;
int screen_num = 0;
display = XOpenDisplay(NULL);
Window window = XRootWindow(display, screen_num);
dumpWidgetTree((Widget)window);
return 0;
}
我尝试简单地将 Window 转换为 Widget,但这只是导致了一个段错误,正如预期的那样。
【问题讨论】:
-
X11 没有“小部件”的概念,您只能使用 XQueryTree 获取所有子窗口的列表 - 请参阅 tronche.com/gui/x/xlib/window-information/XQueryTree.html
-
@AndreySidorov,这是有道理的,谢谢。鉴于我特别想尝试尽可能多地提取有关屏幕上小部件的信息(例如:这是按钮还是文本区域?),有什么方法可以从 Motif 或 Xt级别并获取此信息?
-
对 Motif 了解不多,如果您的问题非常具体到所讨论的工具包。如果他们使用某些 X 传输来跟踪内部状态(原子、属性、选择),那么也许可以,但您需要通过主题代码库才能知道这一点
-
交互式地,您可以使用 Editres 做到这一点。我不确定这是否是一个解决方案。