免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4517 | 回复: 1
打印 上一主题 下一主题

在GTK+的下“打开”菜单项,如何获取文件名? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-02 04:41 |只看该作者 |倒序浏览
这里有一个菜单项“打开”:打开一个图片
/* 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+ 编程, 请问这样怎么实现,看了些教程,可是这样的好像没有看到。给一些例子也可以,谢谢!

论坛徽章:
0
2 [报告]
发表于 2011-04-27 14:29 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP