Le novità di Windows 7 per gli sviluppatori
di Cristian Civera, in Windows 7, 10 novembre 2009
Supporto al multitouch
Una nuova forma di input per l'interfaccia che sta ultimamente andando molto di moda è il multi touch, sfruttato sia da schermi che supportano le pressioni delle dita con tecnica resistiva o capacitiva, sia da mouse in grado di riconoscere le dita che si premono su di esso.
In generale muovere uno o più dita significa dare uno o più input che se interpretati significano un azione da compiere in relazione alle circostanze dell'applicazione. Queste azioni sono dette gesture e le più comuni permettono operazioni quali lo zoom, il pan, la rotazione,il tap singolo e doppio, le quali sono supportate dalle principali applicazioni predefinite di Seven come Explorer, Paint e Picture Viewer. In Windows 7 la strada scelta è stata quindi di preservare le applicazioni già esistenti facendole funzionare anche se l'utente interagisce usando le dita. Questo è possibile grazie alla promozione degli eventi di tipo touch verso quelli di tipo mouse, perciò azioni come il tap singolo e doppio, lo zoom e il pan diventano rispettivamente il click, il doppio click e l'invio un messaggio di tipo WM_MOUSEWHEEL e WM_VSCROLL / WM_HSCROLL.
Per gestire invece in modo esplicito i gesti, è disponibile un nuovo tipo di messaggio di tipo WM_GESTURE che attraverso la struttura GESTUREINFO permette di conoscere il gesto interpretato automaticamente da Windows 7. Se questo non dovesse bastare, attraverso il messaggio WM_TOUCH si hanno a disposizione i punti di pressione delle dita così da implementare i gesti con gli algoritmi che si vogliono, inventandone anche dei propri.
Purtroppo non esiste un supporto ufficiale nel mondo managed, neanche attraverso il Windows API code pack, ma occorre aspettare Windows Presentation Foundation 4.0 che includerà il supporto al multitouch, fornendo anche le inerzie, del quale si parlerà in modo specifico in un'altra occasione.
Nel SDK di Windows 7 sono contenuti però degli esempi per gestire i messaggi WM_GESTURE e WM_TOUCH tra cui uno basato su WinForm e C# descritto a questo indirizzo. In queste tipologie di applicazioni per gestire il multitouch è necessario sovrascrivere il metodo WndProc dal quale passano tutti i messaggi Windows ed è in questo punto che è possibile recuperare i gesti dell'utente e applicarli al controllo, pannello e form dove lo si ritiene necessario.
const int WM_GESTURE = 0x0119; protected override void WndProc(ref Message m) { bool handled; handled = false; switch (m.Msg) { case WM_GESTURE: handled = DecodeGesture(ref m); break; } // Chiamo la gestione originale dei messaggi base.WndProc(ref m); if (handled) { // Marco il messaggio come processato m.Result = new IntPtr(1); } }
La funzione DecodeGesture utilizzata nel codice di esempio processa il messaggio e lo fa dapprima ottenendo la struttura GESTUREINFO tramite il parametro lParam del messaggio che contiene il puntatore a tale informazione. Tramite poi la proprietà dwID si determina il tipo di gesto utilizzato per compiere poi le relative azioni.
private bool DecodeGesture(ref Message m) { GESTUREINFO gi = new GESTUREINFO(); gi.cbSize = Marshal.SizeOf(gi); // Carico le informazioni della gesture if (!GetGestureInfo(m.LParam, ref gi)) return false; switch (gi.dwID) { case GID_BEGIN: case GID_END: break; case GID_ZOOM: break; case GID_PAN: break; case GID_ROTATE: break; case GID_TWOFINGERTAP: break; case GID_PRESSANDTAP: break; } return true; }
Eventualmente è possibile inoltre gestire il messaggio WM_GESTURENOTIFY per conoscere il supporto alle gesture e impostare tramite SetGestureConfig i tipi di gesti che si intendono supportare per una specifico handle.
Attenzione: Questo articolo contiene un allegato.
Contenuti dell'articolo
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimeti
-
Introduzione a Team Foundation Server 2010
-
Multithreading e parallelismo con il .NET Framework 4.0
-
Le novità nel .NET Framework 4.0 di WPF, WCF e WF
-
Le novità di Visual Basic 2010 e C# 4
-
Mostrare le camere di sorveglianza tramite il .NET Micro Framework
-
La piattaforma Microsoft per il cloud computing: Windows Azure
-
Interoperabilità con WCF: invocare servizi da PHP e Flash
-
Le problematiche più comuni di un'architettura M-V-VM con WPF
-
Costruire una chat per Silverlight con il PollingDuplexHttpBinding

Commenti
mi piace
non mi piace
Facebook
Twitter









