转帖:MFC打开文件和文件夹

一、利用API实现打开文件对话框和利用MFC来实现打开文件对话框。

方法一:API部分:

//    OPENFILENAME ofn;

//    TCHAR szFile[MAX_PATH];

//    ZeroMemory(&ofn,sizeof(ofn));

//    ofn.lStructSize = sizeof(ofn);

//    ofn.lpstrFile = szFile;

//    ofn.lpstrFile[0] = TEXT('/0');

//    ofn.nMaxFile = sizeof(szFile);

//    ofn.lpstrFilter = TEXT("all/0*.*/0jpg/0*.jpg/0bmp/0*.bmp/0"); //定义三个选项,alltextexe

//    ofn.nFilterIndex = 1;      //定义首选项是哪一个

//    ofn.lpstrFileTitle = NULL;

//    ofn.nMaxFileTitle = 0;

//    ofn.lpstrInitialDir = NULL;

//    ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

//    if(GetOpenFileName(&ofn))

//    {

//           ::SetDlgItemText(this->m_hWnd,IDC_EDIT1,szFile);

//    } 

方法二、MFC实现

//    CFileDialog dlg(TRUE, NULL, NULL,

//           OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

//           NULL);

//

//    if(dlg.DoModal() == IDOK)

//    {

//           szFilename = dlg.GetPathName();

//           ::MessageBox(NULL,szFilename,NULL,MB_OK);

//    }

注意:打开文件的方式和打开文件夹的方式是不同的。打开文件的方式是不断的打开直到出现末端为文件,否则遇到文件夹还要继续打开。而打开文件夹则是只要选择到一个路径的文件夹就打开。

下面的这种方式是打开文件夹MFC实现。

       static TCHAR strDirName[MAX_PATH];

 

       BROWSEINFO bi;

       CString szString = TEXT("选择一个源文件子文件夹");

       bi.hwndOwner = ::GetFocus();

       bi.pidlRoot = NULL;

    bi.pszDisplayName = strDirName;

       bi.lpszTitle = szString;

    bi.ulFlags = BIF_BROWSEFORCOMPUTER | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS;

    bi.lpfn = NULL;

       bi.lParam = 0;

       bi.iImage = 0;

 

       LPITEMIDLIST pItemIDList = ::SHBrowseForFolder(&bi);

       if(pItemIDList == NULL)

       {

              return ;

       }

 

       ::SHGetPathFromIDList(pItemIDList, strDirName);

 

       CString str = strDirName;

       if(str != "" && str.Right(1) != '//')

              str += '//';

       ::SetDlgItemText(this->m_hWnd,IDC_EDIT1,str);

你可能感兴趣的:(api,null,BI,mfc,exe,Path)