gpt4 book ai didi

c# - Windows.Forms.MouseButtons 中的奇数枚举值

转载 作者:可可西里 更新时间:2023-11-01 08:28:10 26 4
gpt4 key购买 nike

我在 System.Windows.Forms 命名空间中找到了这个 gem (IMO)。我正在努力弄清楚为什么要这样设置。

[Flags]
public enum MouseButtons
{
None = 0,
Left = 1048576,
Right = 2097152,
Middle = 4194304,
XButton1 = 8388608,
XButton2 = 16777216,
}

有人可以解释为什么它使用这些值(2^202^24 的幂)而不是这个:

public enum MouseButtons
{
None = 0,
Left = 1, // 2^0
Right = 2, // 2^1
Middle = 4, // 2^2
XButton1 = 8, // 2^3
XButton2 = 16, // 2^4
}

第一个值是二进制的 100000000000000000000,这为另外 20 位留出了空间!为什么我们需要这样的空间,为什么要这样保存?

最佳答案

Winforms 中使用的枚举值确实倾向于与 winapi 中的相应位相匹配,但鼠标按钮根本不是这种情况。解释这个需要一个相当疯狂的猜测。

我有一个,不依赖 Windows 消息检索鼠标按钮状态的方式非常奇怪。您调用 GetAsyncKeyState(),通过 VK_XBUTTON2 传递 VK_LBUTTON。实际上代表鼠标键而不是键盘键的假虚拟键。这发生在方式很久以前,我无法猜测他们为什么这样做而不是提供适当的 GetMouseButtonState() winapi 函数。

Keys 枚举也具有这些值,例如 Keys.LButton 等。 Keys 的其他特别之处在于它还可以对修改键的状态进行编码。例如有 Keys.Control 和 Keys.ControlKey。以及 Keys.Shift 与 Keys.ShiftKey 等。第一个表示 key 的状态,第二个表示实际的 key 。这允许像 keydata == (Keys.Control | Keys.F) 这样的友好代码来检查是否按下了 Ctrl+F。

这些 MouseButtons 枚举值的意义在于它们适合 Keys 枚举值以指示鼠标按钮的状态。为对 key 进行编码的位保留 20 位可用。

听起来不错,不是吗?唯一的问题是它在 Winforms 对象模型中从未以这种方式组合。但可以在您自己的代码中定义也使用鼠标状态的快捷方式。

关于c# - Windows.Forms.MouseButtons 中的奇数枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17032574/

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