CallWindowProc函数将消息信息传递到指定的窗口过程。
LRESULT CallWindowProc的(
WNDPROC 【lpPrevWndFunc】, | //指向上一个过程的指针 |
HWND 【的hWnd】, | //处理窗口 |
UINT 【消息】, | // 信息 |
WPARAM 【wParam中】, | //第一个消息参数 |
LPARAM 【lParam的】 | //第二个消息参数 |
); |
参数
【lpPrevWndFunc】
指向上一个窗口过程。
如果通过调用GetWindowLong参数设置为GWL_WNDPROC或DWL_DLGPROC的GetWindowLong函数获得此值,则实际上是窗口或对话框过程的地址或表示该地址的句柄。
【的hWnd】
标识接收消息的窗口过程。
【消息】
指定消息。
【wParam中】
指定附加的消息特定信息。该参数的内容取决于【消息】参数的值。
【lParam的】
指定附加的消息特定信息。该参数的内容取决于【消息】参数的值。
返回值
返回值指定消息处理的结果,并取决于发送的消息。
备注
使用CallWindowProc函数进行窗口子类化。通常,具有相同类的所有窗口共享一个窗口过程。子类是具有相同类的窗口或一组窗口,其消息在被传递到类的窗口过程之前被其他窗口过程(或过程)拦截和处理。
SetWindowLong函数通过更改与特定窗口关联的窗口过程来创建子类,导致Windows调用新窗口过程而不是前一个窗口过程。应用程序必须通过调用CallWindowProc将新窗口过程未处理的任何消息传递到上一个窗口过程。这允许应用程序创建一个窗口过程链。
如果定义了STRICT,则【lpPrevWndFunc】参数的数据类型为WNDPROC.WNDPROC类型的声明如下:
LRESULT (CALLBACK* WNDPROC) (HWND, UINT, WPARAM, LPARAM);
如果未定义STRICT,则【lpPrevWndFunc】参数的数据类型为FARPROC.FARPROC类型的声明如下:
int(FAR WINAPI * FARPROC)()
在C中,FARPROC声明指示具有未指定参数列表的回调函数。但是在C ++中,声明中的空参数列表表示一个函数没有参数。这个微妙的区别可以打破粗心的代码。以下是处理这种情况的一种方法:
WNDPROC MyWindowProcedure
FARPROC MyWindowProcedure
#其他
The C++ Programming Language, Second Edition,
#万一
...
lResult = CallWindowProc(MyWindowProcedure, ...) ;
有关使用空参数列表声明的函数的更多信息,请参阅Bjarne Stroustrup的【C ++编程语言,第二版,】.
Windows NT: CallWindowProc功能可以处理Unicode到ANSI的转换。如果直接调用窗口过程,则不会得到转换。
也可以看看
FARPROC, GetWindowLong, SetClassLong, SetWindowLong, WNDPROC