- 論壇徽章:
- 0
|
這里有一個(gè)菜單項(xiàng)“打開”:打開一個(gè)圖片
/* 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函數(shù):
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);
} |
然后我想在一個(gè)窗口下顯示打開的圖片:
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); |
初學(xué)gtk+ 編程, 請(qǐng)問這樣怎么實(shí)現(xiàn),看了些教程,可是這樣的好像沒有看到。給一些例子也可以,謝謝! |
|