5

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

4

2 回答 2

4

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

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

所以处理一组 OnXXXX 方法/XXXX 事件比直接拦截 windows 消息要容易得多。

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

于 2012-04-16T05:20:43.030 回答
2

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

所以有时你需要躲在被窝里。

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

于 2012-04-16T05:08:08.107 回答