CallWindowProcA 函数 (winuser.h)
将消息信息传递给指定的窗口过程。
语法
LRESULT CallWindowProcA(
[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, ...) ;
有关使用空参数列表声明的函数的详细信息,请参阅 Bjarne Stroustrup 的 C++ 编程语言第二版 。
CallWindowProc 函数处理 Unicode 到 ANSI 的转换。 如果直接调用窗口过程,则无法利用此转换。
示例
有关示例,请参阅 对窗口进行子类化
注意
winuser.h 标头将 CallWindowProc 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | winuser.h (包括 Windows.h) |
Library | User32.lib |
DLL | User32.dll |
API 集 | ext-ms-win-ntuser-window-l1-1-4 (在 Windows 10 版本 10.0.14393 中引入) |
请参阅
概念性
引用