Функция OFNHookProc


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

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

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

Синтаксис

UINT_PTR CALLBACK OFNHookProc(
    HWND hdlg,
    UINT uiMsg,
    WPARAM wParam,
    LPARAM lParam
);

Параметры

hdlg

[in] Дескриптор дочернего диалогового окна блока диалога Открыть (Open) или Сохранить как ( Save As). Используйте функцию GetParent, чтобы получить дескриптор окна блока диалога Открыть (Open) или Сохранить как ( Save As).

uiMsg

[in] Идентифицирует полученное сообщение.

wParam

[in] Определяет дополнительную информацию о сообщении. Точное значение зависит от значения параметра uiMsg.

lParam

[in] Определяет дополнительную информацию о сообщении. Точное значение зависит от значения параметра uiMsg. Если параметр uiMsg обозначает сообщение WM_INITDIALOG, lParam указывает на структуру OPENFILENAME, содержащую значения определяемые тогда, когда создавалось диалоговое окно.

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

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

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

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

Замечания

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

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

Фильтр - процедура не принимает сообщения, предназначенные для стандартных органов управления заданного по умолчанию диалогового окна. Вы можете эти стандартные элементы управления поделить на подклассы, но это сомнительное действие, потому что оно может сделать вашу прикладную программу несовместимой с будущими версиями стандартного диалогового окна. Тем не менее, стандартные диалоговые окна в стиле Проводника, предоставляют набор сообщений, которые фильтр - процедура может использовать, чтобы контролировать и управлять диалоговым окном. Они включают набор уведомительных сообщений, отправляемых из диалогового окна, такие как  сообщения, которые вы можете отправлять, чтобы извлечь информацию из диалогового окна. Полный список этих сообщений, см. в статье Фильтр - процедуры (hook) для стиля Проводника.

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

Не вызывайте функцию EndDialog из фильтр - процедуры. Вместо этого, она может вызывать функцию PostMessage, чтобы вставить в очередь сообщений процедуры диалогового окна сообщение WM_COMMAND со значением IDABORT. Извещение IDABORT закрывает диалоговое окно и вынуждает функцию блока диалога возвратить значение ЛОЖЬ (FALSE). Если вам нужно узнать, почему фильтр - процедура закрыла диалоговое окно, вы должны предусмотреть свой собственный механизм связи между фильтр - процедурой и вашей прикладной программой.

Смотри также 

Обзор Библиотека стандартных диалоговых оконФункции, используемые библиотекой стандартных диалоговых окон, GetOpenFileName, GetSaveFileName, OFNHookProcOldStyle, OPENFILENAME

Размещение и совместимость OFNHookProc

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Да версии 3.1 и выше

Windows Me

Да

Windows 98

Да

Windows 95

Да

Используемая библиотека

-

Заголовочный файл

 

- объявлено в

Commdlg.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

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

Hosted by uCoz