4.36.2.4 - Фильтр - процедура OFNHookProc

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

Синтаксис.

UINT APIENTRY OFNHookProc
(
	HWND hdlg,			// дескриптор дочернего окна диалога
	UINT uiMsg,			// код сообщения
	WPARAM wParam,			// параметр сообщения
	LPARAM lParam 			// параметр сообщения
);

Параметры
hdlg
Дескриптор дочернего диалогового окна блока диалога Открыть или Сохранить как. Используйте функцию GetParent, чтобы получить дескриптор окна блока диалога Открыть или Сохранить.
uiMsg
Идентифицирует полученное сообщение.
wParam
Определяет дополнительную информацию о сообщении. Точное значение зависит от значения параметра uiMsg.
lParam
Определяет дополнительную информацию о сообщении. Точное значение зависит от значения параметра uiMsg.
Если параметр uiMsg показывает сообщение WM_INITDIALOG, lParam указывает на структуру OPENFILENAME, содержащую значения определенные тогда, когда было создано диалоговое окно.

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

Замечания
Когда вы используете функции GetOpenFileName или GetSaveFileName, чтобы создать стандартное диалоговое окно Открыть (Open) или Сохранять Как (Save As) в стиле Проводника, вы можете предоставить фильтр - процедуру OFNHookProc. Чтобы разрешить ее действие, используйте структуру OPENFILENAME, которую вы передали в функцию создания диалогового окна. Установите указатель на фильтр - процедуру в элементе lpfnHook и установите флажок OFN_ENABLEHOOK в элементе Flags.
Если вы предоставляете фильтр - процедуру для стандартного диалогового окна в стиле Проводника, система создает блок диалога, который является потомком заданного по умолчанию диалогового окна. Фильтр - процедура действует как процедура диалогового окна для дочернего диалогового окна. Это дочернее диалоговое окно основано на шаблоне, который вы установили в структуре OPENFILENAME, или это - заданное по умолчанию дочернее диалоговое окно, если никакой шаблон не определен. Дочернее диалоговое окно создается, когда заданная по умолчанию процедура диалогового окна обрабатывает сообщение WM_INITDIALOG. После того, как дочернее диалоговое окно обрабатывает свое собственное сообщение WM_INITDIALOG, заданная по умолчанию процедура диалогового окна перемещает стандартные элементы управления, в случае необходимости, чтобы создать место для любых дополнительных элементов управления дочернего диалогового окна. Затем система передает уведомительное сообщение CDN_INITDONE фильтр - процедуре.
Фильтр - процедура не принимает сообщения, предназначенные для стандартных элементов управления заданного по умолчанию диалогового окна. Вы можете эти стандартные элементы управления поделить на подклассы, но это сомнительное действие, потому что оно может сделать вашу прикладную программу несовместимой с будущими версиями стандартного диалогового окна. Тем не менее, стандартные диалоговые окна в стиле Проводника, предоставляют набор сообщений, которые фильтр - процедура может использовать, чтобы контролировать и управлять диалоговым окном. Они включают набор уведомительных сообщений WM_NOTIFY, передаваемых из диалогового окна, также как и сообщения, которые вы можете пересылать, чтобы отыскать информацию из диалогового окна. Полный список этих сообщений, см. в статье "Фильтр - процедуры для стиля Проводника."
Если фильтр - процедура обрабатывает сообщение WM_CTLCOLORDLG, она должна возвратить допустимый дескриптор кисти для закрашивания фона диалогового окна. В большинстве случаев, если она обрабатывает какое-либо сообщение WM_CTLCOLOR*, то должна возвратить допустимый дескриптор кисти для закрашивания фона определяемого элемента управления.
Не вызывайте функцию EndDialog из фильтр - процедуры. Вместо этого, она может вызывать функцию PostMessage, чтобы в процедуру диалогового окна послать сообщение WM_COMMAND со значением IDABORT. Объявление IDABORT закрывает диалоговое окно и вынуждает функцию блока диалога возвратить значение ЛОЖЬ (FALSE). Если вам нужно узнать, почему фильтр - процедура закрыла диалоговое окно, вы должны предоставить свой собственный механизм связи между фильтр - процедурой и вашей прикладной программой.
OFNHookProc - метка - заместитель для определяемого программой или определенного библиотекой имени функции. Тип LPOFNHOOKPROC - указатель или на фильтр - процедуру OFNHOOKPROC или OFNHookProcOldStyle.

Смотри также
GetOpenFileName, GetSaveFileName, OFNHookProcOldStyle, OPENFILENAME

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

Windows NT			Да 
Win95				Да 
Win32s				Нет 
Импортируемая библиотека		Определяется пользователем 
Заголовочный файл			-
Уникод				Нет 
Замечания по платформе		LPOFNHOOKPROC

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