有没有一种方法可以选择哪些文件通过标准OPENFILE对话框显示给用户?(Is there a wa

2019-07-04 21:25发布

Vista中引入的接口:IFileDialog ::使用setfilter,这让我设置一个将被要求每一个潜在的文件名,看它是否应该被显示给用户的过滤器。

微软删除了在Windows 7中,并没有支持它在XP。

我想自定义我们打开文件对话框,这样我可以控制哪些文件会显示给最终用户。 这些文件与产品代码内部标记 - 没有在任何文件名本身要过滤的(因此文件扩展名的过滤器是没有用在这里 - =我需要真正询问每一个,看它是否是额外的过滤器内该规定的我们的用户参数)。

我猜想,微软删除使用setfilter接口,因为往往它是太慢了。 我可以想像,各种类似的想法这一个不用于网络和云存储和你有什么很好地扩展。

但是,我需要知道,如果有一个选择界面,完成同样的目标,或者如果我真的是只限于看着我的文件对话框的文件扩展名过滤的目的?


跟进:
进一步寻找到CDN_INCLUDEITEM,这就需要OPENFILENAME的远景之前的版本后,我发现,这是最无用的API可想而知。 它只过滤非文件系统对象。 换句话说,你不能用它来过滤文件。 或文件夹。 非常的事情之一将过滤的时间打开一个文件99.99%或保存对话框。 难以置信的!

有一个很老的文章作者简介Paul DiLascia它提供了从列表视图控件中的每个列表视图更新时间删除每个有问题的文件名的方法。

但是,我知道从痛苦的体验,列表视图可以随时间更新。 如果你正在寻找一个大文件夹(许多项目)或连接是有点慢(重仓服务器和/或大量文件),然后将文件添加到对话零碎。 因此,一个人必须要反复过滤掉冒犯的文件名。

事实上,我们目前的自定义文件打开对话框使用定时器来看看视图的周期性的文件名列表,看是否存在一个给定的模式中的任何文件,以使另一个控制。 否则,有可能来检查这些文件的存在,找不着,但片刻后视图更新有多个文件名,并没有事件被发送到你的对话框,表明的观点已经改变。 事实上,我与不必编写和公共控件维护的代码文件的经验,多年来对话框一直认为微软是不是很cluefull当谈到如何写这样的事情。 活动是不完整的,在未有效时间发送,如果没有必要的重复,并且有用的通知的全类是不存在的。

可悲的是,我想我可能不得不放弃哦这种想法。 除非有人有一个想法,我怎么可能能够跟上视图自发地改变,而用户试图与它交互(即,它会很尴尬去从列表视图中删除了条目,并改变用户的可视位置,或突出显示的文件或滚动位置等)

Answer 1:

您需要初始化回调您的CFileDialog。 然后,你需要处理CDN_INCLUDEITEM通知代码包含或排除的项目。

您还可以查看这篇大文章 。 笔者使用了一些其他方法,除了回调



Answer 2:

正如你已经发现了,开始在Windows 7中不再可能从基于内容显示筛选出的文件,只有文件扩展名。 你可以,但是,验证用户选择的文件(S)是可以接受的,你让对话框关闭之前,如果他们不然后显示一个消息框,用户并保持对话框打开。 也就是说,你将能够做的,除非你创建自己的自定义对话框中最好的。



文章来源: Is there a way to choose which files are displayed to the user via the standard OPENFILE dialogs?