4.21 - Фильтр - процедуры для диалоговых окон в стиле Проводника

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

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

  1. Сообщение WM_INITDIALOG и другие стандартные сообщения блока диалога типа WM_CTLCOLORDLG, которое является сообщением элемента управления цветом.
  2. Набор уведомительных сообщений WM_NOTIFY, которые указывают на действия, принимаемые пользователем или на другие события диалогового окна.
  3. Сообщения для любых дополнительных средств управления, которые Вы определили, устанавливая шаблон дочернего блока диалога.

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

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

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

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

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

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


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Владимир Соковиков - 18.03.2002