为啥在鼠标移动操作期间修饰键的状态没有按预期改变?

Posted

技术标签:

【中文标题】为啥在鼠标移动操作期间修饰键的状态没有按预期改变?【英文标题】:Why don't modifier keys' state change as expected during mouse move operations?为什么在鼠标移动操作期间修饰键的状态没有按预期改变? 【发布时间】:2015-10-13 16:46:56 【问题描述】:

想知道是否有其他人遇到此问题。在 El Capitan 上的 Parallels 11 中使用 Windows 10 VM 时,如果您处于按下鼠标键的鼠标事件中,您似乎无法检查修饰键。

我正在观察鼠标当前是否按下,Parallels 仅在鼠标按钮或不同的非修改键盘键更改状态时发送/存储修改键更改(或释放不同的修改键,但在按下时不会)。

所以...有人知道如何解决这个问题吗?我们绝对希望支持 Parallels。 (我也向他们提交了一个关于这个问题的错误,因为它看起来肯定是错误的。)

这是代码。只需创建一个新项目并将其粘贴到主窗口的代码隐藏中。

bool isDragging;

protected override void OnMouseDown(MouseButtonEventArgs e)

    if(e.ClickCount == 1 && e.ChangedButton == MouseButton.Left)
    
        e.Handled = true;
        isDragging = true;
        CaptureMouse();
    
    base.OnMouseDown(e);


protected override void OnMouseMove(MouseEventArgs e)

    if(isDragging)
    
        e.Handled = true;
        Title = "Pressed: " + (Keyboard.Modifiers == ModifierKeys.Shift);
    
    base.OnMouseMove(e);


protected override void OnMouseUp(MouseButtonEventArgs e)

    if(isDragging && e.ChangedButton == MouseButton.Left)
    
        e.Handled = true;
        isDragging = false;
        ReleaseMouseCapture();
    
    base.OnMouseUp(e);

【问题讨论】:

【参考方案1】:

啊啊啊!问题解决了!它本身不是错误,但它是由 Parallels 引起的,您必须明确启用。

具体来说,您必须将键盘的设置更改为“优化游戏”。这告诉 Parallels 对关键通知消息更加详细。

为什么他们决定将其称为“游戏优化”而不是提供更多信息,或者至少更好地解释该功能的作用,这超出了我的理解。几天的测试和尝试变通方法,然后是向 Parallels 提交的错误报告,只是为了发现它可以通过设置进行控制。那是来自我,一个软件架构师。我什至无法想象非技术人员会在这里经历什么。对 Parallels 来说真的很糟糕。

【讨论】:

我希望我能多次投票!这个问题一直困扰着我一天中的大部分时间。 我知道你的意思。尝试围绕修饰键开发某些功能并且不注册它们真的很令人沮丧。他们真的应该将其命名为“优化游戏”以外的其他名称,或者至少更好地解释该功能的作用。

以上是关于为啥在鼠标移动操作期间修饰键的状态没有按预期改变?的主要内容,如果未能解决你的问题,请参考以下文章

鼠标左键点击是啥意思?

如何在按钮按下事件之外在 Silverlight 中获取鼠标按钮状态?

鼠标移动到<a>标签上面,改变背景颜色,使用a:hover没用,这是为啥?

为啥我在for循环中进行了一些更改后键的值没有改变

Kivy 滚动条滚动方向与鼠标

安卓手机怎么移动软件图标?为啥自动移到桌面啊怎么移动到上一页?