2015-09-19 97 views
0

根據用於OPENFILENAME structure的文檔中,使用下面的算法來選擇初始目錄:MFC的CFileDialog和lpstrInitialDir

視窗7:

  1. 如果lpstrInitialDir具有相同的值作爲通過了應用程序第一次使用打開另存爲對話框中,用戶最近選擇的路徑用作初始目錄ectory。
  2. 否則,如果lpstrFile包含一個路徑,那麼該路徑就是初始目錄。
  3. 否則,如果lpstrInitialDir不是NULL,它指定了初始目錄。
  4. 如果lpstrInitialDirNULL和當前目錄包含指定的過濾器類型的任何文件,初始目錄爲當前目錄。
  5. 否則,初始目錄是當前用戶的個人文件目錄。
  6. 否則,初始目錄是桌面文件夾。

我用下面的代碼來構建一個文件對話框:

CFileDialog dlgFile(bOpenFileDialog); 
dlgFile.m_ofn.lpstrInitialDir = strSourcePath; 
dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH); 

然而,它總是會打開strSourcePath相同的默認文件夾。有誰知道爲什麼?它應該只在第一次使用這個目錄時,隨後的文件打開時應該記住最後一個文件夾(算法中的第1點)。我使用的Windows 7

+0

該文檔似乎有衝突。雖然[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

回答

0

這裏VS2012是修復:

dlgFile.m_ofn.lpstrInitialDir = strSourcePath.GetBuffer(_MAX_PATH); 

不要忘記調用strSourcePath.ReleaseBuffer();當你完成。

如果您使用lpstrFile來指定文件名,那麼您可能需要在文件名前加上初始目錄路徑。

+0

對不起,忘了添加... strSourcePath是一個 CString strSourcePath; strSourcePath =「C:\\ Foldername」; – Skynight

+2

這並不能解決任何問題。 'CString'有一個隱含的'LPCTSTR'轉換運算符(用於問題中)。 'lpstrInitialDir'類型爲'LPCTSTR'。無論如何,將指針傳遞給可修改的字符串都是錯誤的。我不知道,爲什麼你認爲這是一個解決方案。 – IInspectable