我知道Microsoft建议使用GetOpenFileName()
和GetSaveFileName()
上的Common Item对话框,但我正在处理一些旧代码。
如何限制GetOpenFileName()
仅允许用户选择某个目录中的文件?
例如,我只希望用户能够从“Images”目录中选择一个文件。我不希望他们在打开文件时能够导航到其他目录。他们必须从“Images”目录中选择一个文件。
标志 OFN_NOCHANGEDIR 听起来像是我需要的,但如果用户在打开文件时更改它,则只会将当前目录更改回原始目录。
如果使用GetOpenFileName()
无法实现,是否可以使用较新的Common Item Dialog?
答案 0 :(得分:2)
对于GetOpenFileName()
和GetSaveFileName()
,您可以为OPENFILENAME::lpfnHook
字段分配回调程序。收到CDN_FILEOK
通知后,通过向对话框发送CDM_GETFOLDERPATH
消息来检索所选文件夹。如果您不接受该文件夹,请向用户显示一条消息,然后通过调用SetWindowLong()
来设置非零DWL_MSGRESULT
值来拒绝所选文件,并从钩子返回非零值过程
更新:对于IFileOpenDialog
和IFileSaveDialog
,您可以实施IFileDialogEvents::OnFolderChanging
事件回调,以防止导航到不需要的文件夹,只需返回错误{{ 1}}除HRESULT
或S_OK
以外的值。