当我有表格活动时,为什么要使用WndProc?

bad*_*ash 5 .net wndproc winforms

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

Phi*_*ght 5

WndProc 是 WinForms 如何通过更易于使用和理解的 .NET 层提供 Win32 窗口消息包装器的方式。

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

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

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