文件选择构建(GtkFileSelect)是一种快速简单的显示文件对话框的方法,带有‘确定’,‘取消’,‘帮助’按钮,可以极大地减少编程时间。
1, 创建文件选择构建
GtkWidget *gtk_file_selection_new(gchar *title);
注意文件选择构建本身就是一个窗体,所以不需要也不能把它放入另外的窗体。一般放入回调内,对某事件响应弹出文件选择构件。
2, 设置文件名
void gtk_file_selection_filename(GtkFileSelection *filesel,gchar *filename);
文件选择构件的结构如下:
typedef struct {
GtkWidget *dir_list;
GtkWidget *file_list;
GtkWidget *selection_entry;
GtkWidget *selection_text;
GtkWidget *main_vbox;
GtkWidget *ok_button;
GtkWidget *cancel_button;
GtkWidget *help_button;
GtkWidget *history_pulldown;
GtkWidget *history_menu;
GList *history_list;
GtkWidget *fileop_dialog;
GtkWidget *fileop_entry;
gchar *fileop_file;
gpointer cmpl_state;
GtkWidget *fileop_c_dir;
GtkWidget *fileop_del_file;
GtkWidget *fileop_ren_file;
GtkWidget *button_area;
GtkWidget *action_area;
} GtkFileSelection;
在为文件选择构建的信号设置回调函数时,可能用到ok_button,cancel_button两个指针。例如打开一个文件,我们需要对ok_button的clicked信号设置回调函数使他连接打开文件的函数。也可以添加删除修改一些内部控件。
3, 获取用户输入或选中的文件名
Gchar* gtk_file_selection_get_filename(GtkFileSelection *filesel);
该函数可以返回用户输入或者选中的文件。通常我们需要在ok_button的clicked事件回调内调用它。
下面看一个简单的demo
GtkWIdget *FileSelectio;
void OpenFIle(GtkWIdget *widget,gpointer *data);
void button_event(GtkWIdte *widget,gpointer *data);
Int main(int agrc,char *argv[])
{
GtkWidget *window;
GtkWidget *button;
Gtk_init(&argc,&argv);
window = gtk_window_new(GTK_WINDOWTOLEVEL);
gtk_widget_set_size_request(window,100,100);//调整窗体大小
gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL);
button = gtl_button_new_with_label(“打开文件”);
gtk_signal_connect(GTK_OBJECT(button),”clicked”,G_CALLBACK(button_event),NULL);
gtk_container_add(GTK_CONTAINER(window),button);
gtk_widget_show(button);
gtk_widget_show(window);
gtk_main();
}
Void button_event(GtkWidget *widget ,gpointer *data)
{
FileSelection = gtk_file_selection_new(“选择文件”);//创建文件选择构件
gtk_file_selection_set_filename(GTK_FILE_SELECTION(FileSelection),”*.txt”);
gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(FIleSelection)->ok_button),”clicked”,GTK_SLGNAL_FUNC(OpenFIle),NULL);
gtk_widget_show(FIleSelection);
}
Void OpenFile(GtkWidget *widget,gpointer *data)
{
G_print(“%s\n”,gtk_file_selection_get_filename(GTK_FILE_SELECTION(FileSelection)));//输入要选择的文件名
}