CallWindowProc

【勇芳软件工作室】汉化HomePreviousNext

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