Win32 API. Справочник по стандартному диалоговому окну
Страница 12. Фильтр - процедура CCHookProc


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

Фильтр - процедура CCHookProc - определяемая программой или определенная библиотекой процедура повторного вызова, которая используется стандартным диалоговым окном Цвет (Color). Фильтр - процедура принимает сообщения или сообщения, предназначенные для заданной по умолчанию процедуры диалогового окна.

Синтаксис

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

Параметры
hdlg
Дескриптор окна блока диалога Цвет (Color), для которого предназначено сообщение. uiMsg
Идентифицирует получаемое сообщение.
wParam
Определяет дополнительную информацию о сообщении. Точное значение зависит от значения параметра uiMsg.
lParam
Определяет дополнительную информацию о сообщении. Точное значение зависит от значения параметра uiMsg.
Если параметр uiMsg указывает на сообщение WM_INITDIALOG, lParam - указатель на структуру CHOOSECOLOR, содержащую значения, установленные, когда было создано диалоговое окно.

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

Замечания
Когда вы используете функцию ChooseColor, чтобы создать диалоговое окно Цвет (Color), вы можете предоставить фильтр - процедуру CCHookProc, чтобы обрабатывать сообщения или предупреждения, предназначенные для процедуры диалогового окна. Чтобы разрешать действие фильтр - процедуры, используйте структуру CHOOSECOLOR, которую вы передали в функцию создающую диалоговое окно. Определите адрес фильтр - процедуры в элементе lpfnHook, и установите флажок CC_ENABLEHOOK в элементе Flags.
Заданная по умолчанию процедура диалогового окна обрабатывает сообщение WM_INITDIALOG перед передачей его в фильтр - процедуру. Все другие сообщения сначала принимает фильтр - процедура. Затем, возвращаемое значение фильтр - процедуры определяет, обрабатывает ли заданная по умолчанию процедура диалогового окна сообщение или игнорирует его.
Если фильтр - процедура обрабатывает сообщение WM_CTLCOLORDLG, она должна возвратить допустимый дескриптор кисти для закрашивания фона диалогового окна. Вообще, если фильтр - процедура обрабатывает какое-либо сообщение WM_CTLCOLOR*, она должна возвратить допустимый дескриптор кисти для закрашивания фона определяемого элемента управления.
Не вызывайте функцию EndDialog из фильтр - процедуры. Вместо этого, фильтр - процедура может вызывать функцию PostMessage, чтобы послать сообщение WM_COMMAND со значением IDABORT в процедуру диалогового окна. Регистрация IDABORT закрывает диалоговое окно и вынуждает функцию блока диалога возвратить значение ЛОЖЬ (FALSE). Если Вам нужно знать, почему фильтр - процедура закрыла диалоговое окно, вы должны предоставить свой собственный механизм связи между фильтр - процедурой и вашей прикладной программой.
Вы можете делить на подклассы стандартные элементы управления общего диалогового окна. Однако, и процедура стандартного диалогового окна может тоже делить на подклассы элементы управления. По этой причине, вы должны делить на подклассы элементы управления тогда, когда ваша фильтр - процедура обрабатывает сообщение WM_INITDIALOG. Это гарантирует, что ваша процедура подкласса получит определенные элементом управления сообщения раньше процедуры подкласса, установленной процедурой диалогового окна.
CCHookProc - метка - заместитель для определяемого программой или определенного библиотекой имени функции. Тип LPCCHOOKPROC - указатель на фильтр - процедуру CCHookProc.

Смотри также
ChooseColor, CHOOSECOLOR, EndDialog, PostMessage, WM_INITDIALOG, WM_CTLCOLORDLG

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

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

 

 
« Предыдущая статья   Следующая статья »