WNDPROC 回调函数 (winuser.h)

在应用程序中定义的回调函数,用于处理发送到窗口的消息。 WNDPROC 类型定义指向此回调函数的指针。 WndProc 名称是应用程序中定义的函数名称的占位符。

Syntax

WNDPROC Wndproc;

LRESULT Wndproc(
  HWND unnamedParam1,
  UINT unnamedParam2,
  WPARAM unnamedParam3,
  LPARAM unnamedParam4
)
{...}

参数

unnamedParam1

类型: HWND

窗口的句柄。 此参数通常命名为 hWnd

unnamedParam2

类型: UINT

消息。 此参数通常命名 为 uMsg

有关系统提供的消息的列表,请参阅 系统定义的消息

unnamedParam3

类型: WPARAM

其他消息信息。 此参数通常命名 为 wParam

wParam 参数的内容取决于 uMsg 参数的值。

unnamedParam4

类型: LPARAM

其他消息信息。 此参数通常命名为 lParam

lParam 参数的内容取决于 uMsg 参数的值。

返回值

类型: LRESULT

返回值是消息处理的结果,取决于发送的消息。

注解

注释

参数在标头中定义,没有名称: typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);。 因此,语法块将它们 unnamedParam1 - unnamedParam4列为 。 可以在应用中命名这些参数。 但是,它们通常按参数说明中所示命名。 Visual Studio 项目模板将使用这些名称(或类似名称,具体取决于模板)。

如果应用程序在 32 位版本的 Windows作系统上运行,则回调中未捕获的异常将在可用时传递到应用程序的更高级别的异常处理程序。 然后,系统会调用未经处理的异常筛选器,以在终止进程之前处理异常。 如果启用了 PCA,它将在下一次运行应用程序时提供修复问题。

但是,如果应用程序在 64 位版本的 Windows作系统或 WOW64 上运行,则应注意,64 位作系统会根据其 64 位处理器体系结构、异常体系结构和调用约定以不同的方式处理未捕获的异常。 下表汇总了 64 位 Windows作系统或 WOW64 处理未捕获的异常的所有可能方法。

行为类型 系统如何处理未捕获的异常
1 系统禁止出现任何未捕获的异常。
2 系统首先终止该过程,然后程序兼容性助手 (PCA) 在下次运行应用程序时提供修复它。 可以通过向 应用程序清单添加兼容性部分来禁用 PCA 缓解。
3 系统调用异常筛选器,但在退出回调范围时禁止显示任何未捕获的异常,而无需调用关联的处理程序。

下表显示了 64 位版本的 Windows作系统和 WOW64 如何处理未捕获的异常。 请注意,行为类型 2 仅适用于 64 位版本的 Windows 7作系统及更高版本。

操作系统 WOW64 64 位 Windows
Windows XP 3 1
Windows Server 2003 3 1
Windows Vista 3 1
Windows Vista SP1 1 1
Windows 7 及更高版本 1 2

注释

在具有 SP1(32 位、64 位或 WOW64)的 Windows 7 上,系统调用未经处理的异常筛选器,以在终止进程之前处理异常。 如果启用了程序兼容性助手(PCA),则在下次运行应用程序时,它将提供修复问题。

如果需要处理应用程序中的异常,可以使用结构化异常处理来执行此作。 有关如何使用结构化异常处理的详细信息,请参阅 结构化异常处理

要求

Requirement 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
Header winuser.h (包括 windows.h)

另请参阅