Francesco Geri

Il blog di Francesco Geri
posts - 94, comments - 165, trackbacks - 2

Mouse Wheel in un Panel con Controlli non Focusable (2)

Riprendo un mio precedente post su come ottenere lo scroll con il mouse wheel su un controllo che non possa avere il focus.

La soluzione suggerita aveva dei problemi, ed in particolare non gestiva bene il caso in cui il controllo si trovasse all'interno di una form di tipo mdichild, da cui si poteva aprire una form modale.... Ok, non vado avanti nei particolari, ma dico semplicemente che aveva dei problemi.

Per cui qui suggerisco un'altra soluzione, che mi sembra funzionare correttamente e che ho trovato googlando a partire dalla prima.

 

   1: Public Class MyForm
   2:   Inherits System.Windows.Forms.Form
   3:   Implements IClassWithLanguage, IMessageFilter
   4:  
   5:   Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
   6:     Try
   7:         If (m.Msg = &H20A) Then
   8:             ' WM_MOUSEWHEEL, find the control at screen position m.LParam
   9:             Dim pos As Point = New Point(m.LParam.ToInt32() And &HFFFF, m.LParam.ToInt32() >> 16)
  10:             Dim hWnd As IntPtr = WindowFromPoint(pos)
  11:             If (hWnd <> IntPtr.Zero AndAlso hWnd <> m.HWnd AndAlso Not Control.FromHandle(hWnd) Is Nothing) Then
  12:                 SendMessage(hWnd, m.Msg, m.WParam, m.LParam)
  13:                 Return True
  14:             End If
  15:         End If
  16:         Return False
  17:     Catch ex As Exception
  18:         ' Trascura l'eccezione
  19:     End Try
  20:   End Function
  21:  
  22:   ' P/Invoke declarations
  23:   <DllImport("user32.dll")> _
  24:   Private Shared Function WindowFromPoint(ByVal pt As Point) As Int32
  25:   End Function
  26:   <DllImport("User32.dll")> _
  27:   Private Shared Function SendMessage(ByVal hWnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Int32
  28:   End Function

Print | posted on venerdì 24 ottobre 2008 05:57 | Filed Under [ VS2005 .Net ]

Powered by:
Powered By Subtext Powered By ASP.NET