我有一个关于使用 WndProc
的基本问题在我的表单应用程序中。我想知道WndProc
有什么用当我有可用的表单事件时的方法。在哪些情况下我需要创建自定义消息? MSDN告诉它仅用于处理 Windows 消息。
最佳答案
WndProc 是 WinForms 如何为 Win32 windows 消息提供一个更易于使用和理解的 .NET 层的包装器。
通常它以下列方式工作。以 WM_LBUTTONDOWN 窗口消息为例。 Windows.Forms.Control.WndProc 会拦截这条消息,并从消息的 WPARAM 和 LPARAM 中提取相关信息。然后它调用 protected 虚拟方法 OnMouseDown,并将相关信息很好地打包到 MouseEventArgs 中。然后,该实现将在其自己的处理结束时触发 MouseDown 事件。
所以处理一组 OnXXXX 方法/XXXX 事件比直接拦截 windows 消息要容易得多。
但是如果您感兴趣的 Windows 消息不是由 WinForms 处理的怎么办?在这种情况下,您可以覆盖 WndProc 并直接自己处理。另一种用途是拦截消息,然后在控件本身有机会处理它之前将其丢弃。或者您可以创建自定义消息以在应用程序内的控件之间发送。当您想查看控件收到的每条消息时,对于调试也很有用,您只需要在一个地方添加日志记录。
关于.net - 当我有表单事件时,为什么要使用 WndProc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10168913/