今天看到一哥们问了一个问题“C语言选择文件”,想要在C程序中打开选择对话框进行文件选择。
原问题:
我知道这个问题应该是用C调用系统库来实现,而不应该是用C自己写一个窗口程序(太麻烦了)。这个问题勾起了我的兴趣,因为自己从来没这么干过;也十分兴奋,因为没写过Linux下的窗口。于是,一番搜索后,终于让我实现了。
上代码:
在windows下:
#include <windows.h>
#include <Shlobj.h>
#include <tchar.h>
#include <Commctrl.h>
#pragma comment(lib, "comctl32.lib")
int main()
{
LPITEMIDLIST pil = NULL;
INITCOMMONCONTROLSEX InitCtrls = { 0 };
TCHAR szBuf[4096] = { 0 };
BROWSEINFO bi = { 0 };
bi.hwndOwner = NULL;
bi.iImage = 0;
bi.lParam = NULL;
bi.lpfn = NULL;
bi.lpszTitle = _T("请选择文件路径");
bi.pszDisplayName = szBuf;
bi.ulFlags = BIF_BROWSEINCLUDEFILES;
InitCommonControlsEx(&InitCtrls);//在调用函数SHBrowseForFolder之前需要调用该函数初始化相关环境
pil = SHBrowseForFolder(&bi);
if (NULL != pil)//若函数执行成功,并且用户选择问件路径并点击确定
{
SHGetPathFromIDList(pil, szBuf);//获取用户选择的文件路径
wprintf_s(_T("%s"), szBuf);
}
return 0;
}
在Ubuntu下的代码为:
#include <gtk/gtk.h>
void select_file()
{
GtkWidget *dialog;
dialog=gtk_file_chooser_dialog_new("SelectFile",NULL,GTK_FILE_CHOOSER_ACTION_OPEN,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_OK,GTK_RESPONSE_ACCEPT,NULL);
if(gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT)
{
char *filename;
filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
printf("file name is : %s ", filename);
}
gtk_widget_destroy(dialog);
}
int main(int argc,char **argv)
{
gtk_init(&argc,&argv);
select_file();
return 0;
}
效果如下:
linux下的不好截图,不过效果是一样的。
注:在linux下需要先安装了gtk才能运行。