gpt4 book ai didi

c# - 单击鼠标按钮如何在 WinForms 事件中结束?

转载 作者:太空狗 更新时间:2023-10-29 21:16:57 25 4
gpt4 key购买 nike

当我们单击鼠标并在我们的 .NET 程序中触发 MouseClick 事件时,计算机如何知道我们单击了按钮边界中的正确点?

我的意思是幕后发生了什么,为什么我们不需要实现它?

最佳答案

基本上这就是 Windows UI framework named User32 的内容为你做。另见 MSDN: Windows and Messages .

此框架的工作原理是让您的应用程序实现一个从 Windows 接收消息的“消息泵”。消息可以是“鼠标刚刚移过此窗口”“按下鼠标键”。请注意,“窗口”不仅仅是窗体意义上的“窗口”,请务必阅读 MSDN 链接。一个按钮也是一个窗口。

所以:

  • 鼠标通过硬件总线连接到 PC
  • 用户移动鼠标
  • 硬件信号被转换为软件信号
  • Windows 将这些信号转换为消息
  • Windows 将这些消息发送到适当应用程序的消息泵
  • 应用程序随心所欲地处理这些消息

现在 .NET 的 WinForms 为您包装了这个消息泵,并将消息公开为您可以订阅的事件。您可以通过 overriding WndProc() on your control of coice 看到它的实际效果:

protected override void WndProc(ref Message m)
{
Console.WriteLine(m);
base.WndProc(ref m);
}

更深入(来自 MSDN: About Messages and Message Queues ),Windows 消息使用句柄关联到窗口(或 WinForms 术语中的“控件”)。此句柄唯一标识一个控件。

这样 WinForms 就知道 mouse message具有句柄 X 的对象是具有该句柄的控件 Y,因此它会在收到该消息时引发 MouseClick 或相关事件。

关于c# - 单击鼠标按钮如何在 WinForms 事件中结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33144066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com