callWindowProcA 函数 (winuser.h)
将消息信息传递给指定的窗口过程。
语法
LRESULT CallWindowProcA(
[in] WNDPROC lpPrevWndFunc,
[in] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
参数
[in] lpPrevWndFunc
类型: WNDPROC
上一个窗口过程。 如果通过调用设置为GWL_WNDPROC或DWL_DLGPROC的 nIndex 参数的 GetWindowLong 函数来获取此值,则它实际上是窗口或对话框过程的地址,或者仅对 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 集 | Windows 10版本 10.0.14393) 中引入 ext-ms-win-ntuser-window-l1-1-4 ( |
请参阅
概念性
参考