Функция 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++, втором выпуске Bjarne Stroustrup.
Функция CallWindowProc обрабатывает преобразование Юникода в ANSI. Вы не можете воспользоваться этим преобразованием, если вызвать процедуру окна напрямую.
Примеры
Пример см. в разделе Подкласс окна
Заметка
Заголовок winuser.h определяет CallWindowProc как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 2000 Профессиональный [только классические приложения] |
минимальный поддерживаемый сервер | Windows 2000 Server [только классические приложения] |
целевая платформа | Виндоус |
заголовка | winuser.h (включая Windows.h) |
библиотеки |
User32.lib |
DLL | User32.dll |
набор API | ext-ms-win-ntuser-window-l1-1-4 (представлено в Windows 10 версии 10.0.14393) |
См. также
концептуальные
Справочник
процедур окна