【问题标题】:Is there a way to return all Widgets from a parent Window with X11/Xt?有没有办法使用 X11/Xt 从父窗口返回所有小部件?
【发布时间】: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 做到这一点。我不确定这是否是一个解决方案。

标签: x11 xlib motif


【解决方案1】:

您可以从窗口树中获取大部分小部件。您可以使用“XtWindowToWidget”将 windowID 转换为小部件。此方法适用于当前应用中的小部件,并且无法访问无窗口小部件(也称为小工具)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2013-02-13
    • 1970-01-01
    • 2011-06-05
    • 2019-02-01
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多