打开文件对话框和文件夹对话框之MFC和API实现。

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

方法一:API部分:

//    OPENFILENAME ofn;

//    char 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);

转自:http://hi.baidu.com/383114181/blog/item/011b88091aec3df162d986fe.html

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