.net 当我有表单事件时,为什么要使用WndProc?

.net 当我有表单事件时,为什么要使用WndProc?,.net,winforms,wndproc,.net,Winforms,Wndproc,我有一个关于在表单应用程序中使用WndProc的基本问题。我想知道当我有表单事件可用时,WndProc方法的用途是什么。在哪些情况下,我需要创建自定义消息?说明它仅用于处理Windows消息 .NET是Win32的包装器。它不会100%公开Windows中所有内容的方法、事件和属性 所以有时候你需要躲起来 然而,这并不是你要寻找的东西-当你的问题需要它时,一个好的ol'Stack Exchange搜索通常会让你知道。WndProc是WinForms如何为Win32 windows消息提供一个包装

我有一个关于在表单应用程序中使用
WndProc
的基本问题。我想知道当我有表单事件可用时,
WndProc
方法的用途是什么。在哪些情况下,我需要创建自定义消息?说明它仅用于处理Windows消息

.NET是Win32的包装器。它不会100%公开Windows中所有内容的方法、事件和属性

所以有时候你需要躲起来


然而,这并不是你要寻找的东西-当你的问题需要它时,一个好的ol'Stack Exchange搜索通常会让你知道。

WndProc是WinForms如何为Win32 windows消息提供一个包装器,它具有一个更易于使用和理解的.NET层

通常,它的工作方式如下。以WM_LBUTTONDOWN windows消息为例。Windows.Forms.Control.WndProc将截获此消息,并从消息的WPARAM和LPARAM中提取相关信息。然后它调用受保护的虚拟方法OnMouseDown,并将相关信息很好地打包到MouseEventArgs中。然后,实现将在自己的处理结束时触发MouseDown事件

因此,处理一组OnXXXX方法/XXXX事件比直接截获windows消息容易得多

但是,如果您感兴趣的windows消息不是由WinForms处理的,该怎么办?在这种情况下,您可以重写WndProc并直接自己处理它。另一个用途是拦截消息,然后在控件本身有机会处理它之前丢弃它。或者,您可以创建自定义消息,以便在应用程序中的控件之间发送消息。当您想要查看控件接收到的每条消息时,这对调试也很有用,您只需要在一个位置添加日志记录