私の目標は、(独自の C# アプリケーションとして) フローティング ツールバーを作成することです。ユーザーがスクロール ホイールを使用すると、表示されるボタンを変更したいと考えています。簡単に聞こえますが、このワンライナーの問題である必要があります。
MouseWheel += new MouseEventHandler(Form1_MouseWheel);
私が抱えている問題は、アプリケーションにフォーカスがある場合にのみマウス ホイール ハンドラーが呼び出されることです。つまり、ユーザーは最初にクリックし、次にマウスホイールをクリックする必要があります。それは私がやろうとしていることにはなりません。
MouseHover イベント ハンドラーをフックし、form.Activate() を呼び出して、フォーカスを取得できます。ユーザーがアプリケーションにマウスを合わせた直後に (少し待つのではなく) スクロールホイールを使用すると、フォーカスは前のアプリに残り、マウスホイールイベントを取得するため、これは最適ではありません。
当然のことですが、MouseEnter イベントをフックしてそこで Activate() を呼び出しますが、アプリケーションが最前面に表示される代わりに、そのアイコンがタスク バーで点滅し始めます。私は Win7 を使用していますが、この問題はおそらくこれより古いものです。
理想的には、アプリケーションにフォーカスがあるかどうかを気にせずに、マウスホイール イベントを検出できるようにしたいと考えています。前のアプリケーションが入力フォーカスを維持する方が本当に良いでしょう。たとえば、ユーザーがメモ帳を使用している場合、ユーザーは入力し、マウスをアプリに合わせ、スクロール ホイールを使用し、表示されているものを見て、メモ帳での入力を再開することを決定できます。 . 理想的には、このシナリオでは一度もクリックする必要がないようにしたい.
ただし、他に方法がない場合は、アプリケーションにフォーカスを切り替えるソリューションで解決します。
これまでのところ、C# と Windows Forms を使用していますが、問題を解決できるのであれば、別のものを使用することにオープンです。
では、ユーザーが最初にアプリケーションをクリックしてフォーカスすることなく、これらのマウスホイール イベントを表示するにはどうすればよいでしょうか?