GetOpenFileName 能否将文件选择限制为与过滤器匹配的文件?

标签 c winapi getopenfilename

我使用带有 OPENFILENAME 结构的 GetOpenFileName,该结构使用 lpstrFilter 将文件过滤为 *.JPG。但是,在文件打开对话框中,对于文件名,用户可以输入 *.XLS 并查看同一文件夹中的每个 Excel 文件,然后选择打开 XLS 文件。我想阻止用户这样做。例如,我想真正限制它们只能选择 JPG 文件。有办法做到这一点吗?

最佳答案

OPENFILENAME结构中,启用OFN_EXPLOREROFN_ENABLEHOOK标志,并提供指向Explorer-style callback function的指针。在 lpfnHook 字段中。当回调收到 CDN_FILEOK通知,您可以验证输入的文件(不仅仅是文件名,甚至是实际的文件内容,如果需要的话),然后返回适当的返回值以接受/拒绝选择:

If the hook procedure returns zero, the dialog box accepts the specified file name and closes.

To reject the specified file name and force the dialog box to remain open, return a nonzero value from the hook procedure and call the SetWindowLong function to set a nonzero DWL_MSGRESULT value.

关于GetOpenFileName 能否将文件选择限制为与过滤器匹配的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43725674/

相关文章:

C 3d 字符数组

c - 对于 IMEI 号码和 MAC 地址的组合输入集,是否存在完美的哈希函数? (C实现)

c - 将 double 拆分为 C 中的数组

c++ - Windows API - 剪贴板 - GlobalLock - 使用还是不使用?

winapi - 如何在 XP 兼容模式下启动另一个进程?

excel - Vlookup 语法和用户输入问题

c++ - OPENFILENAME 对话框返回亚洲字母而不是文件路径

excel - 如何只获取文件名而不是打开文件的整个文件路径?

c - typedef'ing 指针类型被认为是不好的做法吗?

windows - 资源管理器集成在上下文菜单中,但使用已经运行的实例