分别在Windows与Ubuntu系统下在C程序中打开选择对话框

本文介绍了如何在C程序中利用系统库在Windows和Ubuntu操作系统下打开文件选择对话框。在Windows下实现此功能,而在Ubuntu下则需要依赖gtk库。代码示例展示了在两个系统上的不同实现方式。

今天看到一哥们在问答区问了一个问题“C语言选择文件”,想要在C程序中打开选择对话框进行文件选择。

原问题在这:http://ask.csdn.net/questions/344873

我知道这个问题应该是用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才能运行。具体参考这里

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值