为什么在鼠标移动操作期间修改键的状态没有按预期更改?
Why don't modifier keys' state change as expected during mouse move operations?
想知道是否还有其他人遇到此问题。在 El Capitan 上的 Parallels 11 中使用 Windows 10 VM 时,如果您处于按下鼠标键的鼠标事件中,您似乎无法检查修改键。
我正在观察鼠标当前是否处于按下状态,仅限 Parallels sends/stores 当鼠标按钮或不同的非修饰键盘键改变状态(或释放不同的修饰键,但按下时不会)。
所以...有人知道如何解决这个问题吗?我们绝对希望支持 Parallels。 (我还向他们提交了一个关于这个的错误,因为它看起来肯定是错误的。)
这是代码。只需创建一个新项目并将其粘贴到主 window.
的代码隐藏中
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);
}
啊啊啊!问题解决了!这本身不是错误,但它是由 Parallels 引起的,您必须明确启用它。
具体来说,您必须将键盘设置更改为 'Optimize for games'。这告诉 Parallels 对关键通知消息更加详细。
为什么他们决定将其命名为 'Optimize for games' 而不是更具信息性的名称,或者至少更好地解释了该功能的作用,这超出了我的理解范围。经过几天的测试和变通尝试,随后向 Parallels 提交错误报告,结果发现它可以通过设置进行控制。那是我,一个软件架构师。我什至无法想象非技术人员会在这里经历什么。 Parallels 的电话真的很糟糕。
想知道是否还有其他人遇到此问题。在 El Capitan 上的 Parallels 11 中使用 Windows 10 VM 时,如果您处于按下鼠标键的鼠标事件中,您似乎无法检查修改键。
我正在观察鼠标当前是否处于按下状态,仅限 Parallels sends/stores 当鼠标按钮或不同的非修饰键盘键改变状态(或释放不同的修饰键,但按下时不会)。
所以...有人知道如何解决这个问题吗?我们绝对希望支持 Parallels。 (我还向他们提交了一个关于这个的错误,因为它看起来肯定是错误的。)
这是代码。只需创建一个新项目并将其粘贴到主 window.
的代码隐藏中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);
}
啊啊啊!问题解决了!这本身不是错误,但它是由 Parallels 引起的,您必须明确启用它。
具体来说,您必须将键盘设置更改为 'Optimize for games'。这告诉 Parallels 对关键通知消息更加详细。
为什么他们决定将其命名为 'Optimize for games' 而不是更具信息性的名称,或者至少更好地解释了该功能的作用,这超出了我的理解范围。经过几天的测试和变通尝试,随后向 Parallels 提交错误报告,结果发现它可以通过设置进行控制。那是我,一个软件架构师。我什至无法想象非技术人员会在这里经历什么。 Parallels 的电话真的很糟糕。