Функция обратного вызова LPOFNHOOKPROC (commdlg.h)

[Начиная с Windows Vista, общие диалоговые окна "Открыть" и "Сохранить как" заменены диалоговым окном "Общий элемент". Мы рекомендуем использовать API общих диалоговых окон вместо этих диалоговых окон из общей библиотеки диалоговых окон.]

Получает уведомления, отправленные из диалогового окна. Функция также получает сообщения для всех дополнительных элементов управления, определенных путем указания дочернего шаблона диалогового окна. Процедура перехватчика OFNHookProc — это определяемая приложением или библиотекой функция обратного вызова, используемая с диалоговым окном "Открыть" и "Сохранить как" в стиле Обозреватель.

Тип LPOFNHOOKPROC определяет указатель на эту функцию обратного вызова. OFNHookProc — это заполнитель для имени функции, определяемой приложением.

Синтаксис

LPOFNHOOKPROC Lpofnhookproc;

UINT_PTR Lpofnhookproc(
  HWND unnamedParam1,
  UINT unnamedParam2,
  WPARAM unnamedParam3,
  LPARAM unnamedParam4
)
{...}

Параметры

unnamedParam1

Дескриптор дочернего диалогового окна "Открыть " или "Сохранить как ". Используйте функцию GetParent , чтобы получить дескриптор диалогового окна Открыть или Сохранить как .

unnamedParam2

Идентификатор получаемого сообщения.

unnamedParam3

Дополнительные сведения о сообщении. Точное значение зависит от значения параметра unnamedParam2 .

unnamedParam4

Дополнительные сведения о сообщении. Точное значение зависит от значения параметра unnamedParam2 . Если параметр unnamedParam2 указывает на сообщение WM_INITDIALOG , unnamedParam4 является указателем на структуру OPENFILENAME, содержащую значения, указанные при создании диалогового окна.

Возвращаемое значение

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

Если процедура перехватчика возвращает ненулевое значение, то диалоговое окно по умолчанию игнорирует сообщение.

Для уведомлений CDN_SHAREVIOLATION и CDN_FILEOK процедура перехватчика должна возвращать ненулевое значение, указывающее, что она использовала функцию SetWindowLong для задания ненулевого значения DWL_MSGRESULT .

Комментарии

Если флаг OFN_EXPLORER не указан при создании диалогового окна Открыть или Сохранить как и требуется процедура перехватчика, необходимо использовать старый стиль процедуры-перехватчика OFNHookProcOldStyle . В этом случае диалоговое окно будет иметь пользовательский интерфейс старого стиля.

При использовании функций GetOpenFileName или GetSaveFileName для создания диалогового окна Открыть или Сохранить как в стиле Обозреватель можно указать процедуру перехватчика OFNHookProc. Чтобы включить процедуру перехватчика, используйте структуру OPENFILENAME , переданную в функцию создания диалогового окна. Укажите указатель на процедуру перехватчика в элементе lpfnHook и укажите флаг OFN_ENABLEHOOK в элементе Flags .

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

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

Если процедура перехватчика обрабатывает сообщение WM_CTLCOLORDLG , она должна вернуть допустимый маркер кисти для рисования фона диалогового окна. Как правило, при обработке какого-либо сообщения WM_CTLCOLOR* , он должен возвращать допустимый маркер кисти для рисования фона указанного элемента управления.

Не вызывайте функцию EndDialog из процедуры перехватчика. Вместо этого процедура перехватчика может вызвать функцию PostMessage для публикации сообщения WM_COMMAND со значением IDCANCEL в процедуре диалогового окна. При публикации IDCANCEL диалоговое окно закрывается и функция диалогового окна возвращает значение FALSE. Если необходимо знать, почему процедура перехватчика закрыла диалоговое окно, необходимо предоставить собственный механизм взаимодействия между процедурой перехватчика и приложением.

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header commdlg.h (включая Windows.h)

См. также раздел

Общая библиотека диалоговых окон

Основные понятия

GetOpenFileName

GetSaveFileName

OFNHookProcOldStyle

OPENFILENAME

Справочные материалы