代码之家  ›  专栏  ›  技术社区  ›  redtuna

在未聚焦的窗口上检测鼠标跟?

  •  1
  • redtuna  · 技术社区  · 15 年前

    我的目标是创建一个浮动工具栏(作为它自己的C应用程序),当用户在我身上使用滚轮时,我想更改可见的按钮。听起来很简单,应该只是这一行的问题:

    MouseWheel += new MouseEventHandler(Form1_MouseWheel);
    

    我遇到的问题是,只有当应用程序有焦点时才调用鼠标滚轮处理程序。这意味着用户必须先点击,然后点击鼠标。这不符合我的想法。

    我可以挂接MouseHover事件处理程序,然后调用Form.Activate()以获得焦点。这还不够理想,因为如果用户在鼠标悬停在我的应用程序上后立即使用滚动轮(而不是稍等一点),那么焦点仍然是上一个应用程序,它将获得鼠标跟事件。

    一个自然的做法是挂接mouseenter事件并在那里调用activate(),但是它的图标开始在任务栏上闪烁,而不是我的应用程序走到前面。我使用的是Win7,但这个问题可能比这个问题更老。

    理想情况下,我想做的是检测mousewheel事件,而不必担心我的应用程序是否有焦点。前一个应用程序最好保持输入焦点,例如,如果用户在记事本中,他们可以键入、鼠标移到我的应用程序、使用滚轮、查看他们看到的内容并决定继续在记事本中键入。理想情况下,在这种情况下,我不希望他们点击一次。

    不过,如果没有其他方法的话,我会选择一种将焦点切换到我的应用程序的解决方案。

    到目前为止,我使用的是C和Windows窗体,但如果可以解决我的问题,我愿意使用不同的窗体。

    那么:在用户不必先点击来集中我的应用程序的情况下,我如何才能看到这些mousewheel事件呢?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Thomas Levesque    15 年前

    如果需要捕获应用程序外部的鼠标事件,可以使用全局系统挂钩。有一个很好的.NET实现 here