Mfc CFileDialog-防止删除

Mfc CFileDialog-防止删除,mfc,delete-file,cfiledialog,Mfc,Delete File,Cfiledialog,我有一个从CFileDialog派生的文件打开/保存对话框。是否存在阻止用户在以编程方式使用此对话框浏览时删除文件的方法?目前,他们可以右键单击并进入Windows资源管理器上下文菜单,或者只突出显示一个文件并按Del键。 谢谢。似乎是解决这一问题的两个关键问题: 1) 查找控件的句柄:在CFileDialog中,它包含SHELLDLL_DefView,其中包含SysListView32。Spy++工具有助于显示这一点。覆盖ListView的WndProc,可以防止右键单击 2) 拦截键盘命令。

我有一个从CFileDialog派生的文件打开/保存对话框。是否存在阻止用户在以编程方式使用此对话框浏览时删除文件的方法?目前,他们可以右键单击并进入Windows资源管理器上下文菜单,或者只突出显示一个文件并按Del键。
谢谢。

似乎是解决这一问题的两个关键问题: 1) 查找控件的句柄:在CFileDialog中,它包含SHELLDLL_DefView,其中包含SysListView32。Spy++工具有助于显示这一点。覆盖ListView的WndProc,可以防止右键单击

2) 拦截键盘命令。 通过此链接找到了具有详细说明(以及更多信息)的解决方案:

编辑:如果像上面描述的那样使用钩子函数,它确实可以工作,但是需要一个断言。替代方法是不使用挂钩fcn,而是覆盖以下内容: CFileDialog::OnInitDone//处理WM\u NOTIFY CDN\u INITDONE消息。
CFileDialog::OnFolderChange//处理WM\u NOTIFY CDN\u FOLDERCHANGE消息。

似乎是解决此问题的两个关键问题: 1) 查找控件的句柄:在CFileDialog中,它包含SHELLDLL_DefView,其中包含SysListView32。Spy++工具有助于显示这一点。覆盖ListView的WndProc,可以防止右键单击

2) 拦截键盘命令。 通过此链接找到了具有详细说明(以及更多信息)的解决方案:

编辑:如果像上面描述的那样使用钩子函数,它确实可以工作,但是需要一个断言。替代方法是不使用挂钩fcn,而是覆盖以下内容: CFileDialog::OnInitDone//处理WM\u NOTIFY CDN\u INITDONE消息。
CFileDialog::OnFolderChange//处理WM_NOTIFY CDN_FOLDERCHANGE消息。

请查看此处:使用标准的文件打开对话框无法实现此操作。我也看不出这一要求的理由。如果您阻止用户从那里删除文件,他们只需启动文件资源管理器,导航到同一文件夹,然后删除那里的文件。谢谢@andrewruckle。如链接所述,“…为文件列表子类…”遇到问题。@IInspectable。。。您对文件资源管理器的wrt是正确的;唯一的区别是用户的感知。在我们的应用程序中,所有内容看起来都像来自我们的应用程序。在这种情况下,您的目标不应该是禁用删除项目的功能,而是筛选显示的项目。请看这里:使用标准的“文件打开”对话框无法做到这一点。我也看不出这一要求的理由。如果您阻止用户从那里删除文件,他们只需启动文件资源管理器,导航到同一文件夹,然后删除那里的文件。谢谢@andrewruckle。如链接所述,“…为文件列表子类…”遇到问题。@IInspectable。。。您对文件资源管理器的wrt是正确的;唯一的区别是用户的感知。在我们的应用程序中,一切看起来都像来自我们的应用程序。在这种情况下,您的目标不应该是禁用删除项目的功能,而是过滤显示的项目。然后有人出现并使用UI自动化。这让你回到原点。您试图解决错误的问题,就像。然后有人出现并使用UI自动化。这让你回到原点。您试图解决的问题是错误的,因为。