通常,當您使用CFileDialog多次打開一個文件時,會保留當前目錄。也就是說,每次對話框在前一個對話結束的目錄中打開時(如果未取消)。即使你在不同的地方使用不同的CFileDialog實例,這也是有效的。CFileDialog的當前目錄在.exe和.dll中不一致
即使在重新啓動程序之後,仍會保留上一個目錄。
但它看起來像在我的應用程序中,這不適用於跨DLL:從主.exe程序調用的CFileDialogs具有其當前目錄和來自.dll的CFileDialogs有另一個。他們不會互相影響,但其他行爲「正常」。
因此,我最終得到兩個不一致的當前目錄,並且您必須再次從DLL導航到所需的位置。有時你會忘記更改目錄,並且從一個目錄加載一些數據到.exe中的一些數據,以及另一個目錄的.dll中的一些其他數據並得到奇怪的結果。
你知道一個方法,當從.exe和.dll打開CFileDialog時有相同的當前目錄嗎?
說明:我不希望對話始終從相同的目錄開始,我希望它們保留上次使用的目錄,但在.exe和.dll中始終如此。
我的.exe文件是在VS2010中的VS2003,.dll中創建的。 (我最初的猜測是你需要在DLL中的CFileDialog構造函數中提供主窗口句柄,但這沒有幫助。我的下一個猜測是通過GetCurrentDirectory()手動獲取當前目錄並設置它作爲dll的CFileDialog的起始位置(然後設置當前目錄到它結束的位置),但是這看起來相當難看,我不確定它是否適用於從WinXP到Win8的所有操作系統,因爲它們具有不同的默認目錄規則CFileDialog根據MSDN。)
根據MSDN的OPENFILENAME結構,每當打開一個對話框時,這將導致從WinXP中的相同目錄開始。但是我想從目錄開始,當最後一次對話結束時。 對不起,我會在靜默中澄清一下。 – Steed 2013-05-08 08:12:00
@Steed,重寫CFileDialog :: OnFileNameOK並調用CFileDialog :: GetFolderPath來獲取完成CFileDialog時使用的目錄。將此值用作lpstrInitialDir作爲下一次調用的起始目錄。 – 2013-05-08 08:25:43
這將需要在.exe和.dll之間進行不必要的連接(以及使用CFileDilog加載/保存不同數據的不同功能之間)。這似乎是一個巨大的開銷。我希望只將這作爲最後的手段。 – Steed 2013-05-08 08:31:34