【问题标题】:CFileDialog - prevent deleteCFileDialog - 防止删除
【发布时间】:2017-05-29 07:20:38
【问题描述】:

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

【问题讨论】:

  • 这在使用标准文件打开对话框时是不可能的。我也看不出这个要求的理由。如果您阻止用户从那里删除文件,他们可以启动文件资源管理器,导航到同一个文件夹,然后删除那里的文件。
  • 谢谢@AndrewTruckle。如链接所述,我遇到了“...子类文件列表..”的问题。
  • @IInspectable ...您对 File Explorer 是正确的;唯一的区别是用户感知。在我们的应用程序中,一切看起来都来自我们的应用程序。
  • 在这种情况下,您的目标不应该是禁用删除项目的功能,而是过滤显示的项目。

标签: mfc delete-file cfiledialog


【解决方案1】:

似乎是解决此问题的 2 个关键问题: 1) 找到控件的句柄:在 CFileDialog 中,它包含 SHELLDLL_DefView,其中包含 SysListView32。 Spy++ 工具有助于展示这一点。覆盖 ListView 的 WndProc 就可以防止 Right-click 的

2) 拦截键盘命令。 在此链接中找到了具有很好解释的解决方案(以及更多信息): https://www.codeproject.com/Articles/5782/Implementing-a-Read-Only-File-Open-or-File-Save-Co

编辑:如果使用如上所述的钩子函数,它确实可以工作,但是会得到一个 ASSERT。替代方法是不使用钩子 fcn 而是覆盖以下内容: CFileDialog::OnInitDone //处理 WM_NOTIFY CDN_INITDONE 消息。 CFileDialog::OnFolderChange //处理 WM_NOTIFY CDN_FOLDERCHANGE 消息。

【讨论】:

  • 然后有人出现并使用 UI 自动化。这让你回到了原点。您正在尝试解决错误的问题,如previously explained
猜你喜欢
  • 1970-01-01
  • 2012-08-13
  • 2013-06-05
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 2011-02-28
  • 1970-01-01
相关资源
最近更新 更多