1

我知道 Microsoft 建议使用通用项对话框GetOpenFileName()GetSaveFileName()但我正在使用一些较旧的代码。

如何限制GetOpenFileName()只允许用户选择某个目录中的文件?

例如,我只希望用户能够从“图像”目录中选择一个文件。我不希望他们在打开文件时能够导航到其他目录。他们必须从“图像”目录中选择一个文件。

标志OFN_NOCHANGEDIR听起来可能是我需要的,但如果用户在打开文件时更改它,它只会将当前目录更改回原始目录。

如果无法使用GetOpenFileName(),是否可以使用较新的通用项目对话框?

4

1 回答 1

2

对于GetOpenFileName()GetSaveFileName(),您可以为该OPENFILENAME::lpfnHook字段分配一个回调过程。当它收到CDN_FILEOK通知时,通过向对话框发送CDM_GETFOLDERPATH消息来检索选定的文件夹。如果您不接受该文件夹,则向用户显示一条消息,然后通过调用SetWindowLong()设置一个非零DWL_MSGRESULT值来拒绝选定的文件,并从挂钩过程返回一个非零值。

更新:对于IFileOpenDialogand IFileSaveDialog,您可以实现事件回调以防止导航到不需要的文件夹,只需返回or以外IFileDialogEvents::OnFolderChanging的错误值。HRESULTS_OKE_NOTIMPL

于 2012-11-18T19:43:20.397 回答