Ciò che si descrive come i suoni che si desidera replicare la funzionalità di, ad esempio Microsoft Outlook, dove non c'è bisogno di cliccare in realtà per mettere a fuoco il controllo per utilizzare il mouse ruota su di esso.
Questo è un problema relativamente avanzato da risolvere: consiste nell'implementare l'interfaccia IMessageFilter
del modulo di contenimento, cercando gli eventi WM_MOUSEWHEEL
e indirizzandoli al controllo su cui si trova il passaggio del mouse.
Ecco un esempio (da here):
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsApplication1 {
public partial class Form1 : Form, IMessageFilter {
public Form1() {
InitializeComponent();
Application.AddMessageFilter(this);
}
public bool PreFilterMessage(ref Message m) {
if (m.Msg == 0x20a) {
// WM_MOUSEWHEEL, find the control at screen position m.LParam
Point pos = new Point(m.LParam.ToInt32());
IntPtr hWnd = WindowFromPoint(pos);
if (hWnd != IntPtr.Zero && hWnd != m.HWnd && Control.FromHandle(hWnd) != null) {
SendMessage(hWnd, m.Msg, m.WParam, m.LParam);
return true;
}
}
return false;
}
// P/Invoke declarations
[DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point pt);
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
}
}
Si noti che questo codice è attivo per tutte le forme nell'applicazione, non solo la forma principale.
fonte
2011-01-22 19:11:36
Grazie, visto lì ma non sono sicuro del motivo per cui la gestione di WM_MOUSEWHEEL non è molto auspicabile. – n0ter
Ehi, questo è il mio codice! Non è così sicuro che l'attribuzione richiesta sia appropriata qui, dovrebbe essere. –
Il commento reso dal poster è "La gestione di Windows degli eventi MouseWheel non è molto auspicabile", il che significa che l'implementazione predefinita di Windows della rotellina del mouse significa che invia gli eventi al controllo con focus, non il controllo che il mouse sta passando finita, come la maggior parte delle persone si aspetterebbe o desidererebbe. –