Функция CallWindowProc


Функция CallWindowProc передает информацию сообщения процедуре заданного окна.

Синтаксис

LRESULT CallWindowProc(

    WNDPROC lpPrevWndFunc,// указатель на предыдущую процедуру

    HWND hWnd,            // дескриптор окна

    UINT Msg,             // сообщение

    WPARAM wParam,        // первый параметр сообщения

    LPARAM lParam         // второй параметр сообщения

   );

Параметры

lpPrevWndFunc

[in] Указатель на предшествующую оконную процедуру. Если это значение получено путем вызова функции GetWindowLong с параметром nIndex установленным в GWL_WNDPROC или DWL_DLGPROC, это - фактически или адрес окна, или процедуры диалогового окна, или специальное внутреннее значение, значимое только к CallWindowProc.

hWnd

[in] Дескриптор оконной процедуры, которая принимает сообщение.

Msg

[in] Определяет сообщение.

wParam

[in] Определяет дополнительную конкретизирующую сообщение информацию. Содержание этого параметра зависит от значения параметра Msg.

lParam

[in] Определяет дополнительную конкретизирующую сообщение информацию. Содержание этого параметра зависит от значения параметра Msg.

Возвращаемые значения

Величина возвращаемого значения определяет результат обработки сообщения и зависит от переданного сообщения.

Замечания

Используйте функцию 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 обрабатывает преобразование Unicode-в-ANSI. Вы не получите преобразование, если вызываете оконную процедуру непосредственно.

Функция CallWindowProcW поддерживает Microsoft ® Layer for Unicode (MSLU). К тому же, версия ANSI поддерживается, чтобы обеспечивать более согласованное поведение всех операционных системам Windows ® Microsoft. Чтобы использовать это, Вы должны добавить некоторые файлы к вашему приложению, как изложено в Microsoft Layer for Unicode для систем Windows 95/98/Me.

Пример

Пример смотри в статье Деление на подклассы окна.

Смотри также

Краткий обзор Оконные процедуры, GetWindowLong, SetClassLong, SetWindowLong,

Размещение и совместимость CallWindowProc

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Да версии 3.1 и позже

Windows Me

Да

Windows 98

Да

Windows 95

Да

Используемая библиотека

User32.lib

Заголовочный файл

 

- объявлено в

Winuser.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz