根據用於OPENFILENAME structure的文檔中,使用下面的算法來選擇初始目錄:MFC的CFileDialog和lpstrInitialDir
視窗7:
- 如果lpstrInitialDir具有相同的值作爲通過了應用程序第一次使用打開或另存爲對話框中,用戶最近選擇的路徑用作初始目錄ectory。
- 否則,如果lpstrFile包含一個路徑,那麼該路徑就是初始目錄。
- 否則,如果lpstrInitialDir不是NULL,它指定了初始目錄。
- 如果lpstrInitialDir是NULL和當前目錄包含指定的過濾器類型的任何文件,初始目錄爲當前目錄。
- 否則,初始目錄是當前用戶的個人文件目錄。
- 否則,初始目錄是桌面文件夾。
我用下面的代碼來構建一個文件對話框:
CFileDialog dlgFile(bOpenFileDialog);
dlgFile.m_ofn.lpstrInitialDir = strSourcePath;
dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH);
然而,它總是會打開strSourcePath相同的默認文件夾。有誰知道爲什麼?它應該只在第一次使用這個目錄時,隨後的文件打開時應該記住最後一個文件夾(算法中的第1點)。我使用的Windows 7
該文檔似乎有衝突。雖然[OPENFILENAME](https://msdn.microsoft.com/en-us/library/ms646839.aspx)包含問題中複製的算法,[CFileDialog :: m_ofn](https://msdn.microsoft.com/ en-us/library/43xtah3y.aspx)建議,使用Windows Vista樣式對話框時不支持'lpstrInitialDir'。 – IInspectable