美文网首页
MFC 选择文件代码

MFC 选择文件代码

作者: 拼命微笑轻狂丶书生 | 来源:发表于2017-08-24 11:30 被阅读11次

    最近用MFC做PC端的软件,需要选择文件,现在将我用到的部分代码贴上,以供参考:

    int C字幕处理工具Dlg::SetupCombo(CComboBox *combo, int type)

    {

            HRESULT hResult;

            static char BASED_CODE szFilter[] =

            "Binary or ELF Files (*.MP4)|*.MP4"  

            "|All Files (*.*)|*.*||";

            int nIndex = 0;

            char str_path[MAX_FILENAME_LEN];

            LPTSTR lpEnd;

            /* Try to use default path */

            combo->GetWindowText(str_path, MAX_FILENAME_LEN);

            lpEnd = StrRChr(str_path, NULL, _T('\\')); 

            if (lpEnd) {

                    *lpEnd = _T('\0');

            }

            if (type == OPEN_FILE)

            {

                    CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_ENABLESIZING, szFilter);

                    dlg.m_ofn.lpstrInitialDir = str_path;

                    hResult = (int)dlg.DoModal();

                    if (hResult != IDOK) {

                            return -1;

                    }

            combo->InsertString(0, dlg.GetPathName().GetString());

            combo->SetCurSel(0);

            }

            else

            {

                    CFileDialog dlg(FALSE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT, szFilter);

                    dlg.m_ofn.lpstrInitialDir = str_path;

                    hResult = (int)dlg.DoModal();

                    if (hResult != IDOK) {

                            return -1;

                    }

                    CString str = dlg.GetPathName().GetString();

                    combo->InsertString(0, str);

                    combo->SetCurSel(0);

            }

    return 0;

    }

    void C字幕处理工具Dlg::OnBnClickedMfcbtnChoosefile()

    {

            // TODO: 在此添加控件通知处理程序代码

            SetupCombo(&m_combo_DVR, OPEN_FILE);

    }

    void C字幕处理工具Dlg::OnBnClickedMfcbtnSave()

    {

            // TODO: 在此添加控件通知处理程序代码

            SetupCombo(&m_combo_SAVE, SAVE_FILE);

    }

    上面这份代码可以选择和保存文件。

    之后我又从CSDN上找了一份选择文件和文件夹的代码,这里贴出来给大家参考:

    1、批量选择文件

    // 批量添加文件列表

    voidAddFile()

    {

            CString     szFileName;

            CString     szCount;

            POSITION    pos;

            int i;

            int nCount = 0;//文件数量

            //输入文件

            CFileDialog InFile( TRUE,NULL,NULL,OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT,_T("某种格式|*.fmt|所有文件(*.*)|*.*||") );

            InFile.m_ofn.nMaxFile  = 10000;//文件上限

            InFile.m_ofn.lpstrFile = (LPWSTR)malloc(InFile.m_ofn.nMaxFile*sizeof(TCHAR));

            memset(InFile.m_ofn.lpstrFile,0,InFile.m_ofn.nMaxFile);

            //按了OK按钮,开始获取文件列表

            if(InFile.DoModal() == IDOK)

            {

                    pos=InFile.GetStartPosition();

                    while(pos)

                    {

                            szFileName=InFile.GetNextPathName(pos);

                            //这里szFileName就是文件路径

                            //做点什么事情,比如添加到列表框

                    }

            }

            //释放空间

            free(InFile.m_ofn.lpstrFile);

    }

    2、选择文件夹

    voidSelectPath()

    {

            //选择输出路径

            TCHARszDir[MAX_PATH];

            BROWSEINFO bi;

            ITEMIDLIST *pidl;

            bi.hwndOwner =this->m_hWnd;

            bi.pidlRoot = NULL;

            bi.pszDisplayName = szDir;//这个是输出缓冲区

            bi.lpszTitle = _T("选择输出文件夹:");//标题

            bi.ulFlags = BIF_NEWDIALOGSTYLE;//使用新的界面,在win7中效果较好//BIF_RETURNONLYFSDIRS;

            bi.lpfn = NULL;

            bi.lParam = 0;

            bi.iImage = 0;

            pidl = SHBrowseForFolder(&bi);//弹出对话框

            if(pidl == NULL)//点了取消,或者选择了无效的文件夹则返回NULL

            return;

            if(SHGetPathFromIDList(pidl, szDir))

            szDir = szDir;//szDir就是要获取的文件夹

            //得到之后做点什么

    }

    最后贴上原文地址:http://blog.csdn.net/qq446252221/article/details/17379995

    相关文章

      网友评论

          本文标题:MFC 选择文件代码

          本文链接:https://www.haomeiwen.com/subject/vxgsdxtx.html