如何在窗口中找到GTK小部件的绝对位置?

时间:2010-01-18 20:27:41

标签: gtk

我可以使用GTK“分配”功能,但只提供相对于其父级的位置。如何在窗口中找到GTK小部件的绝对位置?

也就是说,如果小部件显示500像素,然后300像素,但是嵌套在各种hbox和表格中,我们怎么知道它位于500x300像素的位置?

我需要让一个窗口出现在另一个小部件下的确切位置。

感谢

2 个答案:

答案 0 :(得分:16)

使用gtk_widget_translate_coordinates()函数将子窗口小部件的坐标映射到包含窗口小部件的顶层坐标。它可能看起来像

GtkWidget *somewidget;
gint wx, wy;
gtk_widget_translate_coordinates(somewidget, gtk_widget_get_toplevel(somewidget), 0, 0, &wx, &wy);

请注意,在许多情况下,强制新窗口的位置是错误的,除非它充当弹出菜单。

答案 1 :(得分:5)

另一种方法:

gint wx, wy;
gdk_window_get_origin (gtk_widget_get_window (somewidget), &wx, &wy);