2017-01-13 5 views
1

У меня есть файл открыть/сохранить диалог, полученный из CFileDialog. Есть ли способ предотвратить случайное удаление пользователем файлов во время просмотра с помощью этого диалогового окна? В настоящее время они могут щелкнуть правой кнопкой мыши и перейти в контекстное меню проводника Windows или просто выделить файл и нажать клавишу Del. Спасибо.CFileDialog - предотвратить удаление

+0

Загляните сюда: http://www.programmersheaven.com/discussion/52429/how-to-disble-the-context-menu-in-the-file-name-list-in-the-open-list-in-the-file-name-list-in-the-op- file –

+0

Это невозможно, используя стандартный диалог открытия файла. Я тоже не вижу обоснования этого требования. Если вы запретите пользователю удалять файл, он может просто запустить * Проводник *, перейти к той же папке и удалить там файл. – IInspectable

+0

Спасибо @AndrewTruckle. У меня возникают проблемы «... Подкласс списка файлов ..», как описано в ссылке. – JDoe1234

ответ

0

Похоже, что это два ключевых вопроса для решения этой проблемы: 1) Поиск дескриптора элемента управления: внутри CFileDialog он содержит SHELLDLL_DefView, который содержит SysListView32. Инструмент Spy ++ помогает показать это. Переопределите WndProc ListView и вы можете предотвратить щелчок правой кнопкой мыши

2) Перехват команд клавиатуры. Найдено решение с большим объяснения (наряду с дополнительной информацией) по этой ссылке: https://www.codeproject.com/Articles/5782/Implementing-a-Read-Only-File-Open-or-File-Save-Co

EDIT: Если использовать функцию крюка, как описано выше, он работает, однако получить ASSERT. Альтернативой является не использовать hook fcn, но переопределить следующее: CFileDialog :: OnInitDone // Обрабатывает сообщение WM_NOTIFY CDN_INITDONE. CFileDialog :: OnFolderChange // Обрабатывает сообщение WM_NOTIFY CDN_FOLDERCHANGE.

+0

И затем кто-то приходит и использует UI Automation. И это возвращает вас к квадрату. Вы пытаетесь решить неправильную проблему, как [ранее объяснено] (http://stackoverflow.com/questions/41642751/cfiledialog-prevent-delete#comment70568960_41642751). – IInspectable