在 gtkmm 4 中,如何从继承自的类内部获取XID
定义于中的类型的 X Window ID ?X11/X.h
Gtk::Widget
问问题
143 次
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
我想在接受的答案中添加两件事
get_surface()
检查是否确实返回了有效的非零对象当然很重要。否则在 Widgetsignal_realize()
发出后获取 ID,这是在将小部件分配给表面后完成的。这可以通过覆盖默认处理程序来实现on_realize()
除了强制转换和调用之外
((Gtk::Native)this)->get_surface()
,还可以调用 likeget_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 回答