Функция CallWindowProcA (winuser.h)
Передает сведения о сообщении в указанную процедуру окна.
Синтаксис
LRESULT CallWindowProcA(
[in] WNDPROC lpPrevWndFunc,
[in] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
Параметры
[in] lpPrevWndFunc
Тип: WNDPROC
Предыдущая процедура окна. Если это значение получается путем вызова функции GetWindowLong с параметром nIndex , равным GWL_WNDPROC или DWL_DLGPROC, фактически это либо адрес процедуры окна или диалогового окна, либо специальное внутреннее значение, значимое только для CallWindowProc.
[in] hWnd
Тип: HWND
Дескриптор процедуры окна для получения сообщения.
[in] Msg
Тип: UINT
Сообщение.
[in] wParam
Тип: WPARAM
Дополнительные сведения, относящиеся к сообщению. Содержимое этого параметра зависит от значения параметра Msg .
[in] lParam
Тип: LPARAM
Дополнительные сведения, относящиеся к сообщению. Содержимое этого параметра зависит от значения параметра Msg .
Возвращаемое значение
Тип: LRESULT
Возвращаемое значение указывает результат обработки сообщения и зависит от отправленного сообщения.
Комментарии
Используйте функцию CallWindowProc для создания подклассов окон. Как правило, все окна с одним и тем же классом используют одну процедуру окна. Подкласс — это окно или набор окон с тем же классом, сообщения которого перехватываются и обрабатываются другой процедурой окна (или процедурами) перед передачей в оконную процедуру класса .
Функция SetWindowLong создает подкласс, изменяя процедуру окна, связанную с определенным окном, в результате чего система вызывает новую процедуру окна вместо предыдущей. Приложение должно передавать все сообщения, не обработанные новой процедурой окна, в предыдущую процедуру, вызывая CallWindowProc. Это позволяет приложению создать цепочку оконных процедур.
Если определен параметр STRICT , параметр lpPrevWndFunc имеет тип данных WNDPROC. Тип WNDPROC объявляется следующим образом:
LRESULT (CALLBACK* WNDPROC) (HWND, UINT, WPARAM, LPARAM);
Если параметр STRICT не определен, параметр lpPrevWndFunc имеет тип данных FARPROC. Тип FARPROC объявляется следующим образом:
int (FAR WINAPI * FARPROC) ()
В C объявление FARPROC указывает функцию обратного вызова с неопределенным списком параметров. Однако в C++ пустой список параметров в объявлении указывает, что функция не имеет параметров. Это тонкое различие может нарушить небрежный код. Ниже приведен один из способов решения этой ситуации.
#ifdef STRICT
WNDPROC MyWindowProcedure
#else
FARPROC MyWindowProcedure
#endif
...
lResult = CallWindowProc(MyWindowProcedure, ...) ;
Дополнительные сведения о функциях, объявленных с пустыми списками аргументов, см. в статье Язык программирования C++, второе издание, Бьярне Струсструп.
Функция CallWindowProc обрабатывает преобразование Юникода в ANSI. Вы не сможете воспользоваться этим преобразованием, если вызываете процедуру окна напрямую.
Примеры
Пример см. в разделе Подклассы окна.
Примечание
Заголовок winuser.h определяет CallWindowProc как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | winuser.h (включая Windows.h) |
Библиотека | User32.lib |
DLL | User32.dll |
Набор API | ext-ms-win-ntuser-window-l1-1-4 (представлено в Windows 10 версии 10.0.14393) |
См. также раздел
Основные понятия
Справочные материалы