Поделиться через


Функция 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)

См. также

концептуальные

GetWindowLong

Справочник

SetClassLong

SetWindowLong

процедур окна