Функция 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 |
Нет |
Замечания по платформе |
Не имеется |