gpt4 book ai didi

c - 将弹出菜单放在小部件 GTK 下方

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:36 25 4
gpt4 key购买 nike

我在 GTK 中将弹出菜单放置在我想要的位置时遇到了一些问题(沿着与我的按钮相同的 y 轴,因此它似乎从按钮下拉)。

当我在 win32 中编写类似的东西时,我得到了它的工作,但在我的生活中,我无法让它在我想要的地方绘制!

我已经完成我的研究并且我知道(我认为)什么应该起作用,那就是当我调用 gtk_menu_popup()

我应该将它传递给放置弹出窗口的方法的函数指针(指向方法规范的链接 - http://developer.gnome.org/gtk/2.24/GtkMenu.html#GtkMenuPositionFunc)

但是我对函数指针有点不理解(我说话的时候旁边有 Kernighan 和 ritchie 的书)但我很确定我做对了。

这是我尝试的方法:

void set_position(GtkMenu *menu,gint *x,gint *y,gboolean push_in,gpointer user_data)
{
printf("Help!\n";
GtkWidget *originButton = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(menu),"button");
gdk_window_get_position(originButton->window,x,y);
//now I realise this will place it at the top of the widget but thats acceptable for now, I just want the method to be called!
}

我通过这样做从按钮处理程序中调用它:

static gboolean handler (GtkWidget *widget,GdkEvent *event)
{
GdkEventButton *bevent = (GdkEventButton *) event;
gtk_menu_popup(GTK_MENU(widget),NULL,NULL,set_position,bevent->button,bevent->button,bevent->time);
}

但是当我编译它时它说它不是 GtkMenuPositionFunc,所以我只是转换它(虽然不知道那是否正确)。

问题是我认为我的方法没有被调用,因为它从不打印帮助 :( 另外它仍然在我单击的任何地方生成菜单(可能是因为它没有调用该方法或它应该做的任何事情)。

如果有任何帮助/想法,我们将不胜感激 :) 谢谢 :)

最佳答案

我之前遇到过同样的问题。我使用了以下代码。

static void
set_position(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data)
{
GtkWidget *button = GTK_BUTTON(user_data);

gdk_window_get_origin(button->window, x, y);
*x += button->allocation.x;
*y += (button->allocation.y + (button->allocation.height));
}

static void
handler(GtkWidget *menu, GtkWidget *button)
{
GtkRequisition requisition;

gtk_widget_size_request(menu, &requisition);
if (button->allocation.width > requisition.width)
gtk_widget_set_size_request(menu, button->allocation.width, -1);

gtk_menu_popup(GTK_MENU (menu),
NULL, NULL,
(GtkMenuPositionFunc) set_position, button,
0, gtk_get_current_event_time());
}

关于c - 将弹出菜单放在小部件 GTK 下方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11756767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com