1

在 gtkmm 4 中,如何从继承自的类内部获取XID定义于​​中的类型的 X Window ID ?X11/X.hGtk::Widget

4

2 回答 2

2

并非所有人都有。

那些做的小部件将实现GtkNative接口,该接口提供gtk_native_get_surface功能,允许您获取GdkSurface. 在 gtkmm 中,这将对应于转换为 toGtk::Native和调用get_surface

要从中获取Window句柄,您可以使用GDK_SURFACE_XID宏。为此,我认为不存在 C++ 包装器。您必须调用Gdk::Surface::gobj以获取GdkSurface *并使用 C API。

于 2021-07-25T11:19:04.717 回答
1

我想在接受的答案中添加两件事

  1. get_surface()检查是否确实返回了有效的非零对象当然很重要。否则在 Widgetsignal_realize()发出后获取 ID,这是在将小部件分配给表面后完成的。这可以通过覆盖默认处理程序来实现on_realize()

  2. 除了强制转换和调用之外((Gtk::Native)this)->get_surface(),还可以调用 like get_native()->get_surface()

总之做

void myWidget::on_realize() {
    // Call default handler
    Gtk::Widget::on_realize();
    XID x_window = GDK_SURFACE_XID(get_native()->get_surface()->gobj());
}

尽早获取 X 窗口 ID。

于 2021-07-26T15:12:52.443 回答