Lyr*_*yrk 6 c# events winforms
当我们单击鼠标并在我们的.NET程序中触发一个MouseClick事件时,计算机如何知道我们点击了按钮边界中的右边点?
我的意思是幕后发生了什么,为什么我们不需要实现呢?
基本上,这就是名为 User32 的 Windows UI 框架为您所做的事情。另请参阅MSDN:Windows 和消息。
该框架的工作原理是让您的应用程序实现一个从 Windows 接收消息的“消息泵”。消息可以是“鼠标刚刚移到该窗口上”或“鼠标按钮被按下”。请注意,“窗口”不仅仅是表单意义上的“窗口”,请务必阅读 MSDN 链接。按钮也是一个窗口。
所以:
现在,.NET 的 WinForms 为您封装了这个消息泵,并将消息公开为您可以订阅的事件。您可以通过覆盖WndProc()您对 coice 的控制来查看它的实际效果:
protected override void WndProc(ref Message m)
{
Console.WriteLine(m);
base.WndProc(ref m);
}
Run Code Online (Sandbox Code Playgroud)
更深入(来自MSDN:关于消息和消息队列),Windows 消息使用句柄与窗口(或 WinForms 术语中的“控件”)关联。该句柄唯一标识一个控件。
这样,WinForms 就知道带有句柄 X 的鼠标消息适用于带有该句柄的控件 Y,因此它在收到该消息时引发 MouseClick 或相关事件。