Gtk如何在小部件的最后边缘添加GtkMenu小部件

时间:2009-11-06 08:51:02

标签: gtk

我有一个GtkMenu小工具,我将它添加到按钮点击屏幕上, 但它会在鼠标位置添加,但我想将它添加到按钮小部件的结束边缘,如

+-------+
|BUTTON |
+-------+
+------------+
|Menu Item 1 |
|Menu Item 2 |
+------------+

我使用以下代码添加弹出菜单

    // Add popup menu.
    gtk_menu_popup( GTK_MENU (widget), NULL, NULL, NULL, NULL,                    
                    bevent->button, bevent->time);

确定添加了此功能,但弹出菜单会添加到窗口末尾而不是按钮小部件的结尾...

void set_position (GtkMenu *menu, gint *px, gint *py, gboolean *push_in, gpointer data)
{
    gint w, h;
    GtkBuilder *builder = GetBuilderPointer();
    GtkWidget *button = GTK_WIDGET( gtk_builder_get_object( builder, "button_presence"));

    gdk_window_get_size (button->window, &w, &h);
    gdk_window_get_origin (button->window, px, py);
    *py = h;

    printf("\n\n w[%d] h[%d] px[%d] py[%d]\n\n", w, h, *px, *py );
    *push_in = TRUE;
}


Printf给出如下输出,
[350] h [400] px [341] py [607]

我无法检索按钮小部件的x,y,高度,宽度...
注意:此按钮是一个自定义小部件,其中包含(GtkHBox +(GtkImage + GtkLabel))。

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

gtk_menu_popup()的第四个参数是指向GtkMenuPositionFunc的指针,它是您可以定义的回调。您需要添加这样一个回调,并通过从按钮小部件的GdkWindow中读取它来返回所需的位置。

我这样做已经有一段时间了,但您可能还必须在屏幕上读出父窗口的位置,并将窗口小部件的位置添加到它们以获取您希望弹出菜单的绝对坐标。 / p>