2013-04-10 80 views
0

使用CFileDialog作爲打開的文件,我需要允許用戶只選擇一個顯示在對話框列表區域中的文件,比如點擊它。我們不希望用戶能夠在「文件名」控件中輸入名稱。 OPENFILENAME(OFN)結構有幾個不同的標誌(http://msdn.microsoft.com/en-US/library/ms646839%28v=vs.80%29.aspx),但我沒有看到阻止用戶鍵入文件名的標誌。MFC CFileDialog只打開選擇文件

我看到的最接近的東西是OFN_FILEMUSTEXIST,但只指定該文件存在;它仍然允許用戶鍵入一個名字。

有沒有辦法做到這一點,而不繼承一個新的類?

更多信息

我們需要防止它們在文件名輸入,因爲他們可以打開一個不恰當的。使用lpszFilter參數,我們過濾文件名,使其僅在文件名(不是擴展名)中顯示ABC的文件。所以如果他們輸入文件名,他們可以輸入類似myCoolFileDEF.ext。如果該文件存在,它將繼續並讓它們打開它(即使它們只打開文件名爲ABC的文件,該對話框將不會關閉錯誤消息)。

回答

2

正如以前的答案註釋,您可以在對話框中爲根文件名控制並將其禁用。這不是沒有懲罰 - 如果你打開CFileDialog鉤子回調邏輯,你會在Vista和更高版本上獲得「舊式」文件對話框,而不是「新風格」。 「新風格」文件對話框對於可定製的內容限制更多,並且據我所知,它不提供受支持的方式來獲得文件名控制權。

讀到你的問題,我的第一個直覺就是你過度設計你的解決方案:如果你提供了一個過濾器,那麼用戶必須付出很多麻煩才能選擇錯誤的文件類型,而大多數用戶不會這樣做。如果他們這樣做,用戶可能比您的程序知道得更多。如果是我,我只是使用一個過濾器,然後在文件對話框關閉後,檢查返回的文件名 - 如果它不符合所需的模式,我會建立一個消息對話框詢問用戶是否他們真的很確定,如果他們堅持這樣的話,無論如何都要打開文件。

+2

我同意 - 你打敗了我的答案,但!通過在*文件名提示符之後放置驗證邏輯*,您還可以重用它,例如驗證命令行中提供的文件名或通過拖放操作。 – 2013-04-11 07:09:58