- 论坛徽章:
- 0
|
这里有一个菜单项“打开”:打开一个图片
/* open */
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_OPEN, accel_group);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), menuitem);
g_signal_connect(G_OBJECT(menuitem), "activate",
G_CALLBACK(file_open),
(gchar *)pfilename); |
这是它的callback函数:
static void file_open (GtkMenuItem *menuitem, gchar *filename)
{
GtkWidget *file_open_dialog;
GSList *filenames;
GtkFileFilter *file_filter_bmp, *file_filter_all;
gint result;
file_open_dialog = gtk_file_chooser_dialog_new(_("打开文件"), NULL,
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
NULL);
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(file_open_dialog), g_get_home_dir ());
file_filter_bmp = gtk_file_filter_new();
file_filter_all = gtk_file_filter_new();
gtk_file_filter_set_name(file_filter_bmp, "BMP files (*.bmp)");
gtk_file_filter_set_name(file_filter_all, "All files (*.*)");
gtk_file_filter_add_pattern(file_filter_bmp, "*.bmp");
gtk_file_filter_add_pattern(file_filter_all, "*");
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(file_open_dialog), file_filter_bmp);
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(file_open_dialog), file_filter_all);
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(file_open_dialog), file_filter_bmp);
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(file_open_dialog), file_filter_all);
/* allow the user to choose only ONE file at a time. */
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(file_open_dialog), FALSE);
result = gtk_dialog_run(GTK_DIALOG(file_open_dialog));
if(GTK_RESPONSE_ACCEPT == result)
{
filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(file_open_dialog));
filename = (gchar *)filenames->data;
g_print("%s\n", (gchar *)filenames->data);
}
gtk_widget_destroy(file_open_dialog);
} |
然后我想在一个窗口下显示打开的图片:
pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
image = gtk_image_new_from_pixbuf(gdk_pixbuf_scale_simple(pixbuf, (int)(gdk_pixbuf_get_width(pixbuf)*0.25),
(int)(gdk_pixbuf_get_height(pixbuf)*0.25), GDK_INTERP_BILINEAR));
table = gtk_table_new(1, 2, FALSE);
gtk_table_attach_defaults(GTK_TABLE(table), image, 0,1, 0, 1);
gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox); |
初学gtk+ 编程, 请问这样怎么实现,看了些教程,可是这样的好像没有看到。给一些例子也可以,谢谢! |
|