Фильтр- процедуры (hook)  для стиля Проводника


Вы можете настроить диалоговое окно Открыть (Open) или Сохранить как (Save As) в стиле Проводника, при помощи подключения фильтр - процедуры, пользовательского шаблона, или обоих. Если вы подключаете фильтр - процедуру к блоку диалога в стиле Проводника, система создает диалоговое окно, которое является дочерним для заданного по умолчанию блока диалога. Фильтр - процедура действует как процедура диалогового окна для дочернего блока диалога. Это дочернее диалоговое окно базируется на пользовательском шаблоне или, если ни один такой не предоставлен, то на шаблоне, заданном по умолчанию. Для получения дополнительной информации, см. статью Пользовательские шаблоны для стиля Проводника

Чтобы подключить фильтр - процедуру к  диалоговому окну Открыть (Open) или Сохранить как (Save As) в стиле Проводника, используйте структуру OPENFILENAME, когда вы создаете диалоговое окно. Установите флажки OFN_ENABLEHOOK и OFN_EXPLORER в члене Flags и определите адрес фильтр - процедуры OFNHookProc в члене lpfnHook. Если вы предоставляете фильтр - процедуру и не установили флажок OFN_EXPLORER, то вы должны использовать фильтр - процедуру OFNHookProcOldStyle и получите пользовательский интерфейс старом стиле. Для получения дополнительной информации, см. статью Настройка диалоговых окон в старом стиле.

Фильтр - процедура для стиля Проводника принимает разнообразные сообщения до тех пор, пока диалоговое окно открыто. Это включают в себя нижеследующее:

Кроме того, имеется набор сообщений, который вы можете отправлять в  диалоговое окно в стиле Проводника, чтобы получить информацию или управление поведением и внешним видом диалогового окна.

Если вы предоставляете фильтр - процедуру для блока диалога в стиле Проводника, заданная по умолчанию процедура диалогового окна создает дочерний блок диалога тогда, когда заданная по умолчанию процедура диалогового окна обрабатывает сообщение WM_INITDIALOG. Фильтр - процедура действует как процедура диалогового окна для дочернего блока диалога. В это время фильтр - процедура принимает свое собственное сообщение WM_INITDIALOG с параметром lParam, в котором  установлен адрес структуры OPENFILENAME, используемой, чтобы инициализировать блок диалога. После того, как дочернее диалоговое окно заканчивает обрабатывать свое собственное сообщение WM_INITDIALOG, заданная по умолчанию процедура диалогового окна перемещает стандартные средства управления, если необходимо, чтобы создать место для любых дополнительных органов управления дочернего диалогового окна. Заданная по умолчанию процедура диалогового окна затем отправляет уведомительное сообщение CDN_INITDONE фильтр - процедуре.

Фильтр - процедура принимает уведомляющие сообщения WM_NOTIFY, указывающие на действия, предпринимаемые пользователем в диалоговом окне. Вы можете использовать некоторые из этих сообщений, чтобы управлять поведением диалогового окна. Например, фильтр - процедура принимает сообщение CDN_FILEOK, когда пользователь выбирает имя файла и щелкает по кнопке OK. В ответ на это сообщение, фильтр - процедура может использовать функцию SetWindowLong, чтобы отклонить выбранное имя и заставить диалоговое окно оставаться открытым.

Параметр lParam для каждого сообщения WM_NOTIFY - это указатель на структуру OFNOTIFY или OFNOTIFYEX, которая определяет действие. Член code в заголовке этой структуры OFNOTIFY содержит одно из следующих уведомляющих сообщений.

Сообщение Предназначение
CDN_FILEOK Пользователь щелкнул по кнопке OK; диалоговое окно собирается закрыться.
CDN_FOLDERCHANGE Пользователь открыл новую папку или каталог.
CDN_HELP Пользователь щелкнул по кнопке Справка.
CDN_INCLUDEITEM Выясняет, должен ли элемент быть отображен на экране. Когда пользователь открывает новую папку или каталог, система отправляет это уведомление для каждого элемента в папке или каталоге. Система отправляет это уведомление, только в том случае, если устанавливался флажок OFN_ENABLEINCLUDENOTIFY.
CDN_INITDONE Система закончила инициализировать диалоговое окно, а диалоговое окно закончило обрабатывать сообщение WM_INITDIALOG. А также, система закончила упорядочивать элементы управления в стандартном блоке диалога, чтобы создать место для элементов управления дочернего диалогового окна (если оно есть).
CDN_SELCHANGE Пользователь выбрал новый файл или папку из списка файлов.
CDN_SHAREVIOLATION Стандартное диалоговое окно столкнулось с нарушением правил совместного доступа к файлу, который собирается быть возвращенным.
CDN_TYPECHANGE Пользователь выбрал новый тип файла из списка типов фалов.

Эти сообщения WM_NOTIFY заменяют зарегистрированные сообщения FILEOKSTRING, LBSELCHSTRING, SHAREVISTRING и HELPMSGSTRING, используемые предыдущими версиями диалоговых окон Открыть (Open) и Сохранить как (Save As). Однако, фильтр - процедура также принимает и замененное сообщение после сообщения WM_NOTIFY, если обработка WM_NOTIFY не использует SetWindowLong, чтобы установить флажок  DWL_MSGRESULT в ненулевое значение.

Чтобы извлечь информацию о состоянии диалогового окна или управлять поведением и внешним видом блока диалога, фильтр - процедура может отправить следующие сообщения диалоговому окну.

Сообщение Предназначение
CDM_GETFILEPATH Извлекает путь и имя  выбранного файла.
CDM_GETFOLDERIDLIST Извлекает список идентификаторов элементов, соответствующих текущей папке, которую открыло диалоговое окно. Для получения информации о списках идентификаторов элементов, см. статью Идентификаторы элементов.
CDM_GETFOLDERPATH Извлекает путь текущей папки или каталога в диалоговом окне
CDM_GETSPEC Извлекает имя (не, включая путь) текущего файла, выбранного в диалоговом окне.
CDM_HIDECONTROL Скрывает заданный орган управления.
CDM_SETCONTROLTEXT Устанавливает текст в заданном органе управления.
CDM_SETDEFEXT Устанавливает в диалоговом окне заданное по умолчанию расширение имени файла.

 

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz