2012-04-16 46 views

回答

4

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

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

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

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

2

.NET是Win32的一个包装。它不公开100%的Windows中所有方法,事件和属性。

所以有时你需要在封面下。

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

相关问题