我的目标是创建一个浮动工具栏(作为自己的C#应用程序),当用户在我上方使用滚轮时,我想更改可见的按钮。听起来很容易,应该是这个单线的问题:
MouseWheel += new MouseEventHandler(Form1_MouseWheel);
我遇到的问题是鼠标滚轮处理程序仅在我的应用程序具有焦点时调用。这意味着用户必须先单击,然后鼠标滚动。这不符合我的目的。
我可以挂钩MouseHover事件处理程序并调用form.Activate()然后获得焦点。这不是最理想的,因为如果用户在鼠标悬停在我的应用程序之后立即使用滚轮(而不是等待一点),焦点仍将在之前的应用程序上,并且它将获得鼠标滚轮事件。
一件很自然的事情就是挂钩MouseEnter事件并在那里调用Activate(),但是然后我的应用程序没有进入前面,它的图标开始在任务栏上闪烁。我正在使用Win7,但这个问题可能比这个要老。
理想情况下,我想做的是检测鼠标滚轮事件,而不必担心我的应用程序是否具有焦点。对于以前的应用程序保持输入焦点真的会更好,例如,如果用户在记事本中他们可以键入,将鼠标移到我的应用程序,使用滚轮,看看他们看到了什么,并决定继续在记事本中键入。理想情况下,我不希望他们在这种情况下只需要点击一次。
如果没有别的办法,我会解决一个将焦点转移到我的应用程序的解决方案。
到目前为止,我使用的是C#和Windows Forms,但如果可以解决我的问题,我会愿意使用不同的东西。
那么:如果用户不必点击首先关注我的应用程序,我怎么能看到那些鼠标轮事件呢?