.net - 当我有表单事件时,为什么要使用 WndProc?

标签 .net winforms wndproc

我有一个关于使用 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/

相关文章:

c# - 如何使用方法添加多个变化的值

c++ - 为什么这段代码会运行?

c# - 如何在 C# 单元测试中涵盖图像转换?

.net - VSTO Outlook 2007 唯一邮件 ID

c# - Asp.net 日历控件中的 DropDownList

c# - 捕获鼠标触摸win窗体的标题栏

c++ - 如何使用自定义光标防止系统鼠标光标在 C++ 应用程序中移动?

.net - 我可以使用数据注释通过 Entity Framework 4.1 RC 执行级联删除吗?

c# - Windows窗体,对象出现在其他项目的前面?

vb.net - RTF 行结束转换出现意外结果