Здравствуйте, уважаемые подписчики. Перед вами очередной выпуск рассылки "WinAPI
на русском".
Сайт рассылки: http://www.bcbdev.ru. Материалы по Win32 API, C++Builder.
Раздел "WinAPI": http://www.bcbdev.ru/winapi.htm
Раздел "C++Builder": http://www.bcbdev.ru/cbuilder.htm
Раздел "Примеры кода": http://www.bcbdev.ru/codesamples.htm
Раздел "MSDN по-русски": http://www.bcbdev.ru/msdn/index.php
Обновления на сайте
Нет.
Перевод
Сегодня вашему вниманию представлен перевод функции CFHookProc.
CFHookProc
Функция-ловушка (хук) CFHookProc является определяемой приложением или библиотекой
функцией обратного вызова, которая используется совместно с функцией ChooseFont.
Функция-ловушка получает сообщения или уведомления, предназначенные для диалоговой
процедуры по умолчанию диалогового окна выбора шрифта.
UINT_PTR CALLBACK CFHookProc(
HWND hdlg,
UINT uiMsg,
WPARAM wParam,
LPARAM lParam
);
Параметры
hdlg – дескриптор диалогового окна, для которого предназначаются сообщения.
uiMsg – идентифицирует получаемое сообщение.
wParam - определяет дополнительную информацию о сообщении. Точное значение параметра
зависит от значения параметра uiMsg.
lParam - определяет дополнительную информацию о сообщении. Точное значение параметра
зависит от значения параметра uiMsg. Если значение параметра uiMsg определяет
сообщение WM_INITDIALOG, то значение lParam является указателем на структуру
типа CHOOSEFONT, содержащую значения, заданные при создании диалогового окна.
Возвращаемые значения
Если функция-ловушка возвращает нуль, то сообщение обрабатывает диалоговая процедура
по умолчанию.
Если функция-ловушка возвращает ненулевое значение, то диалоговая процедура по
умолчанию игнорирует данное сообщение.
Комментарии
Когда вы используете функцию ChooseFont для создания диалогового окна выбора
шрифта, вы можете указать функцию-ловушку CFHookProc для обработки сообщений
или уведомлений, предназначенных для диалоговой процедуры. Для указания функции-ловушки
используйте структуру типа CHOOSEFONT, которую вы передаете в функцию создания
диалогового окна. Укажите адрес функции-ловушки в значении члена lpfnHook и флаг
CF_ENABLEHOOK в значении члена Flags структуры.
Диалоговая процедура по умолчанию обрабатывает сообщение WM_INITDIALOG перед
передачей его в функцию-ловушку. Все остальные сообщения функция-ловушка получает
раньше диалоговой процедуры по умолчанию. Возвращаемое функцией значение определяет,
обрабатывает ли сообщения диалоговая процедура по умолчанию, или игнорирует их.
Если функция-ловушка обрабатывает сообщение WM_CTLCOLORDLG, она должна вернуть
действительный дескриптор кисти для отрисовки заднего плана диалогового окна.
Вообще, если функция-ловушка обрабатывает любое из сообщений WM_CTLCOLOR*, она
должна вернуть действительный дескриптор кисти для отрисовки заднего плана элемента
управления.
Не вызывайте функцию EndDialog из функции-ловушки. Вместо этого, функция ловушка
может вызвать функцию PostMessage для отправки сообщения WM_COMMAND со значением
IDABORT диалоговой процедуре. Отправка IDABORT закрывает диалоговое окно и заставляет
диалоговую процедуру вернуть FALSE. Если вам необходимо знать, почему функция-ловушка
закрыла диалоговое окно, вы должны предоставить собственный механизм коммуникации
между функцией-ловушкой и приложением.
Вы можете сабклассировать стандартные элементы управления диалогового окна. Тем
не менее, диалоговая процедура может также сабклассировать элементы управления.
Из-за этого, вы должны сабклассировать диалоговое окно при обработке сообщения
WM_INITDIALOG функцией-ловушкой. Это гарантирует, что вы ваша сабклассированная
процедура получит сообщения, специфичные для элемента управления до того, как
сабклассированная процедура будет установлена диалоговой процедурой.
Требования
Заголовок: объявлена в Commdlg.h, подключать Windows.h.
Библиотека импорта: нет.
Минимальные версии ОС: включена в Windows 95, Windows NT 3.1.
См. также
ChooseFont, CHOOSEFONT, EndDialog, PostMessage, WM_INITDIALOG, WM_CTLCOLORDLG.
Справочник по WinAPI: http://www.bcbdev.ru/winapi/win32api.exe
Справочник по WinAPI (zip-версия): http://www.bcbdev.ru/winapi/win32api.zip
Дружественная рассылка "Программирование на WinAPI": http://subscribe.ru/catalog/comp.soft.prog.russianmsdn
С уважением,
ведущий рассылки
Тарас Сорока.
mailto:stathome@rol.ru