Функция CallWindowProcW (winuser.h)

Передает сведения о сообщении в указанную процедуру окна.

Синтаксис

LRESULT CallWindowProcW(
  [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++, второе издание, by Bjarne Stroustrup.

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

См. также раздел

Основные понятия

GetWindowLong

Справочные материалы

SetClassLong

SetWindowLong

Оконные процедуры