初始目录不适合CFileDialog

Initial directory is not working for CFileDialog

本文关键字:不适合 CFileDialog      更新时间:2023-10-16

我使用CFileDialog,我已经设置了如下的初始路径,如下面的代码所示。这行不通。如果我写错了请指正。

   CFileDialog* filedlg = new CFileDialog(TRUE,(LPCTSTR)NULL ,  (LPCTSTR)NULL , OFN_HIDEREADONLY| OFN_ENABLESIZING , (LPCTSTR)NULL , FromHandle (hImgDlg) ,0 , FALSE  );
   filedlg ->m_ofn.lpstrInitialDir = "C:\" ;
   if ( filedlg ->DoModal() == IDOK )
   {
       /***  do somthing here *****/
   }

如果您看到OPENFILENAME结构的参考,您将看到lpstrInitialDir字段的声明:

如果lpstrInitialDir与应用程序第一次使用OpenSave As对话框时传递的值相同,则使用用户最近选择的路径作为初始目录。

这意味着lpstrInitialDir字段实际上只能在程序中第一次使用对话框时使用。其余时间,它将使用用户选择的最后一个目录。

两个选项:1. 老式对话框样式,指定OFN::lpstrInitialDir

CFileLatinDialog dlg (TRUE, "", "" /*lpszFileName */,
   OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY,
   "All Files(*.*)|*.*||", this, 0,
   FALSE /*bVistaStyle*/);
dlg.m_ofn.lpstrInitialDir = "C:\Models\";
  • Vista样式对话框,指定lpszFileName参数
  • <>之前CFileLatinDialog dlg (TRUE, ", "C:\Models\"/*lpszFileName */,Ofn_pathmustexist | ofn_filemustexist | ofn_hidereadonly;所有文件(* . *)| *。* | |",这);

    如果您设置了文件名位置,则可以将对话框打开到特定位置。如果你真的需要打开文件夹的位置,或者你有一个默认的文件名,我只会使用这个

    CFileDialog* filedlg = new CFileDialog(TRUE, (LPCTSTR)NULL,  (LPCTSTR)_T("C:\MyFolder\DefaultFileName.ext"), OFN_HIDEREADONLY | OFN_ENABLESIZING, (LPCTSTR)NULL, FromHandle (hImgDlg), 0, FALSE);
    

    或者您可以使用Windows函数GetModuleFileName:

    CString csAppFolder;
    TCHAR szPath[MAX_PATH]; 
    // form the path to where we want to store the file
    if (GetModuleFileName(NULL, szPath, MAX_PATH))
    {
        PathRemoveFileSpec(szPath);
        csAppFolder = szPath;
    }
    CFileDialog* filedlg = new CFileDialog(TRUE, (LPCTSTR)NULL, (LPCTSTR)(csAppFolder + _T("\DefaultFileName.ext")), OFN_HIDEREADONLY | OFN_ENABLESIZING, (LPCTSTR)NULL, FromHandle (hImgDlg), 0, FALSE);