我在将弹出菜单放置在 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,所以我只是将它转换(虽然不知道这是否正确)。
问题是我不认为我的方法被调用,因为它从不打印帮助:(加上它仍然在我单击的任何地方生成菜单(可能是因为它没有调用该方法或它应该做的任何事情)。
任何帮助/想法都会受到极大的欢迎:)谢谢:)