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

时间:2012-04-16 05:01:40

标签: .net winforms wndproc

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

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:2)

.NET是Win32的包装器。它不会暴露Windows中100%的方法,事件和所有属性。

所以有时你需要深入研究。

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