Condividi tramite


Il presente articolo è stato tradotto automaticamente.

All'interno di Windows 7

MultiTouch funzionalità in Windows 7

Yochay Kiriaty

Nell'articolo viene descritto:
  • Modelli di programmazione multitouch
  • Movimenti
  • Messaggi non elaborati di touch
In questo articolo utilizza le seguenti tecnologie:
Windows 7

In questo articolo si basa su una versione preliminare di Windows 7. Dettagli sono soggetti a modifiche.

Contenuto

Introduzione a Windows 7 multitouch
Modelli di programmazione multitouch piattaforma di Windows 7
Utilizzo di movimenti
Utilizzo di messaggi di Windows RAW Touch
Riepilogo

In questo articolo è il terzo di una serie di articoli su Windows 7. La serie dedicati alle nuove esperienze utente che sviluppatori possono toccare in per rendere le applicazioni eccellere in Windows 7. Parte 1 trattate librerie. Parte 2 trattate API barra delle applicazioni. Parte 3 vengono illustrate funzionalità multitouch in Windows 7. Scaricare Windows 7 Release Candidate ora consentono di ottenere il meglio di questo articolo.

Introduzione a Windows 7 multitouch

in Windows 7 è è arricchita l'esperienza di Windows con tocco, rendendo tocca un cittadino di prima classe un altro modo per interagire con il computer con il mouse e tastiera. Negli ultimi anni, si hanno sperimentato la persona di una vasta gamma di multitouch periferiche che sono generati un'esperienza utente estremamente positivo. Di conseguenza, è naturale per introdurre tale supporto multitouch in Windows 7 come una funzionalità di base di Windows.

Con la piattaforma di Multitouch Windows 7, è possibile avere la libertà di interagire direttamente con il computer. Ad esempio, si è in grado di raggiungere e lentamente scorrere le immagini direttamente da Esplora risorse, o flick e spostarsi rapidamente attraverso di essi. È importante comprendere che didn’t creiamo un multitouch shell di Windows 7 speciali. Non esiste alcuna speciale Esplora risorse che è disponibile solo sui dispositivi multitouch. L'esempio di più semplice è il 7 sulla barra delle applicazioni passa elenchi di Windows. Quando si utilizza il mouse per fare clic con il pulsante destro del mouse su qualsiasi icona sulla barra delle applicazioni, viene visualizzato il corrispondente elenco di collegamento. Ad esempio, fare clic con il pulsante destro del mouse sull'icona di Windows Live Messenger Mostra elenco passa ’s Live Messenger. Ma fare clic con il pulsante destro del mouse come su utilizzando multitouch? È sufficiente toccare l'icona di Messenger Live e trascinare con il dito, come illustrato nella Figura 1.

fig01.gif

Figura 1 Live spostamento elenco Messenger ’s utilizzo multitouch su

Esecuzione di tale movimento di trascinamento viene illustrato collegamento elenchi ’s Live Messenger. Come può vedere nella Figura 2 , l'elenco di collegamento attivata tocco Visualizza lo stesso contenuto come nell'elenco standard fare clic con il pulsante destro del mouse sul collegamento. L'immagine di destra mostra l'elenco di collegamento del ’s Messenger Live tramite tocco. La spaziatura tra ciascun elemento nell'elenco collegamento abilitato su multitouch è maggiore della spaziatura tra ciascun elemento nell'immagine a sinistra, in base all'impostazione predefinita fare clic con il pulsante destro del mouse passa elenco.

fig01.gif

Nella figura 2 multitouch e visualizzazioni standard di spostamento di elenchi

Windows Live Messenger è solo un esempio in cui Windows 7 doesn’t creare un nuovo insieme di interfacce utente solo per scenari tocco, ma invece rende fondono l'infrastruttura esistente. La barra delle applicazioni è solo un esempio di molte esperienze ottimizzate multitouch forniti con Windows 7, come il Visualizzatore XPS, Visualizzatore foto di Windows e IE8.

Modelli di programmazione multitouch piattaforma di Windows 7

Per fornire soluzioni Windows Touch well-rounded per tutti i tipi di applicazioni, la piattaforma di touch di Windows fornisce vari livelli di supporto. Esistono diversi scenari in base al quale è possibile migliorare le applicazioni utilizzando le funzionalità di piattaforma Touch di Windows. Prima si adotta un approccio specifico, occorre considerare che cosa esattamente da eseguire con l'applicazione.

supporto legacy Let’s si presuppone che sia già un'applicazione esistente con una base di installazione di grandi dimensioni. È possibile porsi, quale sarà mia esperienza multitouch agli utenti quando si esegue l'applicazione in un computer abilitato per multitouch Windows 7? La buona notizia è che piattaforma Windows 7 multitouch fornisce un'esperienza di fuori della casella libera per le applicazioni abilitate per tocco e non progettate per supportare multitouch. In particolare, fornisce supporto gratuito, fuori della casella per alcuni movimenti di base. In altre parole, è possibile prevedere alcuni movimenti di base lavoro e l'effetto desiderato nell'applicazione. I movimenti di base includono finger singolo o a due dita Panoramica, due dita zoom e gesti introdotte nel frame verrà ora.

Aggiunta del supporto multitouch base Qui focalizzata sull'aggiunta di movimenti diretti supportano, così come altri comportamenti e interfaccia utente di modifica per rendere più rapido facile oltre movimento semplice supporto di applicazioni.

Un esempio che già esaminato nella parte iniziale di questo articolo è ottimizzato tocco-collegamento elenchi sulla barra delle applicazioni. Utilizza il metodo getMessageExtraInfo, la barra delle applicazioni possibile tracciare l'origine del messaggio di input e determinare se è un messaggio tocco e rispondere di conseguenza.

Inoltre, è possibile utilizzare i movimenti per migliorare l'applicazione e fornire supporto multitouch migliore. Le applicazioni che rispondere direttamente per i movimenti presentano controllo completo sul relativo funzionamento quando un utente tocca la periferica abilitata al tocco. Ad esempio Windows 7 viene fornito con il Visualizzatore di foto di Windows. Nell'applicazione Visualizzatore foto, il Visualizzatore riceve le informazioni specifiche relative alla posizione che ha origine il movimento di zoom da. Vale a dire il movimento di zoom contiene informazioni relative al punto centrale--specifica X e coordinate, il movimento di zoom, quindi il può Visualizzatore foto concentrarsi intorno al centro del movimento. L'applicazione del Visualizzatore di foto di Windows utilizza inoltre i movimenti di panoramica e di rotazione per fornire un'immagine molto buona esperienza, con relativamente poco sforzo di visualizzazione.

Con i movimenti, è possibile anche eseguire l'override Panoramica del comportamento predefinito. Ad esempio, lo scorrimento tocco predefinito è progettato per funzionare nelle finestre basate su testo che scorre principalmente verticalmente, come pagine Web o documenti; trascinando orizzontalmente è una selezione di testo anziché lo scorrimento. Nella maggior parte delle applicazioni, questo funziona bene. Ma cosa succede se l'applicazione effettivamente necessario supporta lo scorrimento orizzontale? Per alcune applicazioni scorrimento predefinito può apparire anche marcata, passare troppo velocemente o troppo lenta. Grazie al supporto dei movimenti, è possibile ignora l'impostazione predefinita Panoramica comportamento e ottimizzare esigenze l'applicazione ’s.

esperienza ottimizzata per multitouch Lo scenario migliore è quando le applicazioni sono progettate da zero fino a multitouch di supporto. Queste applicazioni di generazione su parte superiore del messaggio Touch di messaggi di Windows, WM_TOUCH. Questo messaggio fornisce dati non elaborati tocco all'applicazione e sia possibile utilizzare questi messaggi e gestire più punti di contatto. La maggior parte dei movimenti che abbiamo detto in precedenza sono movimenti di dito di due, in cui con i messaggi WM_TOUCH è possibile ricevere come molti punti di contatto simultanee come il sottostante toccano supporta hardware tra maiuscole e minuscole.

La piattaforma di Windows 7 multitouch fornisce anche la modifica e processori a inerzia che consentono di interpretare i messaggi tocco. Pensare a modifica come una casella nera che riceve come input l'oggetto che è vengano ignorata e tutti i messaggi correlati tocco. Il risultato è una matrice di trasformazione affine 2D che rappresenta la trasformazione che si è verificato di conseguenza il movimento del dito. Ad esempio, se si sono state scrivendo un'applicazione di modifica di foto, si potrebbero ottenere due foto contemporaneamente la stessa ora utilizzando tuttavia molti dita che si desidera ruotare, ridimensionare e convertire le foto, e il processo di modifica fornisce le modifiche che è necessario per riflettere sull'oggetto.

A inerzia fornisce un modello di fisica molto semplice per le applicazioni e fornisce un metodo semplice per continuare la transizione di un oggetto senza problemi anche dopo prelevati le dita dalla periferica basati tocco, per creare un effetto di transizione semplice, anziché l'arresto di oggetto sul punto.

Utilizzo di movimenti

Ogni volta che l'utente tocca un dispositivo di Windows 7 attivato tocco sensibili, la piattaforma di Windows 7 multitouch invia messaggi di azione, WM_GESTURE, all'applicazione per impostazione predefinita. Questo è il comportamento di fuori della casella disponibile e sarà necessario opz-uscita se si desidera interrompere la ricezione di messaggi.

I movimenti vengono considerati come uno o due dita tocco input che convertono in un tipo di azione predefiniti (azione), l'utente esegue. Una volta rilevato (il sistema operativo esegue tutto il lavoro per l'utente), il sistema operativo invierà un messaggio di movimento per l'applicazione. Il messaggio contiene tutte le informazioni necessarie per la decodifica e rendendo il lavoro. Windows 7 supporta i seguenti movimenti:

  • Zoom
  • Finger singolo e a due dita Panoramica
  • Ruotare
  • Toccare due dita
  • Premere e toccare

Gestione dei messaggi WM_Gesture Per poter lavorare con i movimenti, sarà necessario gestire i messaggi WM_GESTURE inviati all'applicazione. Se si è un programmatore Win32, è possibile controllare i messaggi WM_GESTURE in funzione WndProc ’s l'applicazione.

Il WM_GESTURE è il messaggio generico che utilizzato per tutti i movimenti. Di conseguenza, per determinare il movimento è necessario gestire, è necessario decodificare il messaggio di movimento. Le informazioni sui movimenti sono disponibili nel parametro lParam, e si desidera utilizzare una funzione speciale, GetGestureInfo, per decodificare il messaggio di azione, come illustrato nel frammento di codice riportato di seguito.

GESTUREINFO gi;
ZeroMemory(&gi, sizeof(GESTUREINFO));
gi.cbSize = sizeof(gi);
BOOL bResult = GetGestureInfo((HGESTUREINFO)lParam, &gi);

Dopo aver ottenuto una struttura GESTUREINFO, è possibile controllare il dwID per identificare il movimento è stato eseguito. La struttura GESTUREINFO contiene più membri importanti:

  • cbSize -la dimensione della struttura, in byte
  • ptsLocation - POINTS A struttura contenente le coordinate associate con il movimento. Queste coordinate sono sempre relativi l'origine della finestra
  • dwFlags -lo stato del movimento, ad esempio iniziare, a inerzia e di fine
  • ullArguments - un valore integer senza segno a 64 bit contenente gli argomenti per i movimenti che rientrano in otto byte. Si tratta informazioni aggiuntive univoco per ogni tipo di movimento

Queste informazioni, è ora possibile spostarsi in avanti e scrivere il metodo completo switch case che gestisce tutti i movimenti, come illustrato nella Nella figura 3 .

Nella figura 3-switch case metodo

void CMTTestDlg::DecodeGesture(WPARAM wParam, LPARAM lParam)
{
    GESTUREINFO gi; 
    ZeroMemory(&gi, sizeof(GESTUREINFO));
    GetGestureInfo((HGESTUREINFO)lParam, &gi);
    switch (gi.dwID){
        case GID_ZOOM:
            // Code for zooming goes here
            break;
        case GID_PAN:
            break;
        case GID_ROTATE:
            break;
        case GID_TWOFINGERTAP:
            break;
        case GID_PRESSANDTAP:
            break;
        default:
            // You have encountered an unknown gesture
            break;
    CloseGestureInfoHandle((HGESTUREINFO)lParam);
}

Si noti che alla fine della funzione che si chiama la funzione di CloseGestureInfoHandle che chiude le risorse associate al gestore di informazioni di movimento. Se si gestisce il messaggio WM_GESTURE, è responsabilità dell'utente per chiudere l'handle utilizzando questa funzione. In caso contrario potrebbe causare perdite di memoria.

Gestione dei messaggi di movimento dispone di un flusso fisso che include la configurazione, decodifica il messaggio di azione e gestisce i movimenti specifici in base alle esigenze dell'applicazione. Come può vedere nel codice precedente, non è difficile che a questo scopo.

Ora let’s esaminare in dettaglio i movimenti di zoom, verranno avere un'idea dell'aspetto di tutti gli altri movimenti.

Utilizzare il movimento di zoom per la scala di un oggetto

Movimento di zoom è in genere riconosciuto dagli utenti come un movimento “ pinch ” tra due punti tocco, in cui spostare le dita vicino altro per eseguire lo zoom indietro e spostare le dita allontanate per eseguire lo zoom e ingrandire il contenuto. Il movimento di zoom consente di scalare la dimensione degli oggetti. Figura 4 illustra come funziona il movimento di zoom.

fig01.gif

Nella figura 4 Zoom movimento

A questo punto, let’s vedere il codice necessario per implementare l'opzione GID_ZOOM per ottenere l'effetto di zoom desiderato.

La struttura di informazioni sul movimento include il membro dwFlags viene utilizzato per determinare lo stato del movimento e può includere uno qualsiasi dei seguenti valori:

  • GF_BEGIN -Indica che il movimento viene avviato, ricevuto nel messaggio di WM_Gesture primo
  • GF_INERTIA -Indica che il movimento è attivato a inerzia
  • GF_END -Indica che il movimento ha terminato
  • Il impostazione predefinita dell'opzione – indica il resto del messaggio movimento e viene in genere definito per il delta

Verrà utilizzato il flag GF_BEGIN per salvare le coordinate di avvio iniziale del tocco in variabili come riferimento per la procedura seguente. Salvare il ptsLocation nella variabile _ptFirst. Per il movimento di zoom, il ptsLocation indica al centro dello zoom.

Il seguente messaggio di zoom che arriva viene gestito dal caso predefinito. Salvare le coordinate alla variabile _ptSecond. Successivamente, è il punto centrale dello zoom, lo zoom di calcolare e dell'ultimo aggiornamento rettangolare è (l'oggetto grafico) per riflettere il punto centrale di zoom e percentuale di zoom. nella figura 5 illustra questi argomenti.

Nella figura 5 GID_ZOOM switch

case GID_ZOOM:
switch(gi.dwFlags)
{
case GF_BEGIN:
    _dwArguments = LODWORD(gi.ullArguments);
    _ptFirst.x = gi.ptsLocation.x;
    _ptFirst.y = gi.ptsLocation.y;
    ScreenToClient(hWnd,&_ptFirst);
    break;
default:
    // We read here the second point of the gesture. This is middle point between fingers. 
    _ptSecond.x = gi.ptsLocation.x;
    _ptSecond.y = gi.ptsLocation.y;
    ScreenToClient(hWnd,&_ptSecond);
    // We have to calculate zoom center point 
    ptZoomCenter.x = (_ptFirst.x + _ptSecond.x)/2;
    ptZoomCenter.y = (_ptFirst.y + _ptSecond.y)/2;           
    
    // The zoom factor is the ratio between the new and the old distance. 
    k = (double)(LODWORD(gi.ullArguments))/(double)(_dwArguments);
    // Now we process zooming in/out of the object
    ProcessZoom(k,ptZoomCenter.x,ptZoomCenter.y);
    InvalidateRect(hWnd,NULL,TRUE);

    // Now we have to store new information as a starting information for the next step
    _ptFirst = _ptSecond;
    _dwArguments = LODWORD(gi.ullArguments);
    break;
}
break;

Nel gestore caso predefinito, salvare la posizione del movimento e dai due set di punti, che rappresenta il punto di contatto corrente e quello precedente, è calcolare la posizione del centro di zoom e memorizzarlo in ptZoomCenter. È inoltre possibile calcolare il fattore di zoom calcolando il rapporto tra i due punti. Una chiamata alla funzione di supporto ProcessZoom Aggiorna le nuove coordinate per riflettere il punto di fattore e il centro di zoom.

Gestisce il resto dei movimenti di predefinito di Windows 7 è molto simile per la specifica ingrandire il movimento gestione descritta in precedenza. Tutti i movimenti seguono dello stesso flusso, e solo l'implementazione di logica interna è diverso per ogni movimento, per ogni scenario di use case. Successivamente, verranno esaminati il modello ottimale e conseguenti nell'API che consente di ricevere e gestire i raw tocco eventi.

Utilizzo di messaggi di Windows RAW Touch

Per avviare la ricezione di messaggi non elaborati tocco, WM_TOUCH, è necessario richiedere il sistema operativo avviare inviare messaggi tocco dell'applicazione e interrompere i messaggi di azione predefinita. A tale scopo, è necessario chiamare la funzione RegisterTouchWindow(HWND hWnd, ULONG uFlags). Chiamare questa funzione Registra una singola hWnd elemento (in genere una finestra) il tocco-attivazione.

Come con i movimenti, è possibile gestire i messaggi WM_TOUCH nel WndProc ’s applicazione funzione. Un singolo messaggio WM_TOUCH può contenere più diverse strutture di input “ punti di contatto messaggi ” che devono essere decompresso in una matrice di tocco. Come procedura standard, che si desidera decomprimere il messaggio WM_TOUCH in matrice di strutture TOUCHINPUT, dove ogni struttura di tale matrice rappresenta i dati da un punto singolo tocco. Per decomprimere, è necessario chiamare la funzione GetTouchInputInfo(HTOUCHINPUT hTouchInput, UINT cInputs, PTOUCHINPUT pInputs, int cbSize) e passargli il lParam del messaggio WM_TOUCH e un tocco appena creato faccia matrice, come illustrato nella Figura 6 .

Nella figura 6 decompressione WM_TOUCH

case WM_TOUCH:
{
    unsigned int numInputs = (unsigned int) wParam; 
    TOUCHINPUT* ti = new TOUCHINPUT[numInputs]; 
    if(GetTouchInputInfo((HTOUCHINPUT)lParam, numInputs, ti, sizeof(TOUCHINPUT)))
    {
        // Handle each contact point
        for(unsigned int i=0; i< numInputs; ++i)
        {
           /* handle ti[i]  */
        }
    }
    CloseTouchInputHandle((HTOUCHINPUT)lParam);
    delete [] ti;
}
break;
default:
    return DefWindowProc(hWnd, message, wParam, lParam);


 

Qui è possibile visualizzare come è possibile completare il TOUCHPOINT ti matrice con i dati da ogni punto di contatto. Successivamente, si scorrere la matrice di punti tocco, applicare la logica a ciascun punto tocco, il commento di handle ti [i]. Infine, è necessario pulire l'handle tocco chiamando CloseTouchInputHandle(HTOUCHINPUT hTouchInput) passando lParam ’s WinProc di originale. La mancata verifica comporta perdite di memoria.

Il codice precedente rappresenta il primo passaggio nella gestione messaggi WM_TOUCH. Struttura, di input di un singolo tocco TOUCHINPUT, contiene tutte le informazioni necessarie su un punto singolo tocco che sarà necessario lavorare:

  • dwID -è l'identificatore punto tocco che distingue un input tocco particolare da altro
  • dwFlags -è un insieme di flag di bit che specificano lo stato del punto di contatto
  • X e Y Coordinata del punto tocco (fondamentalmente la posizione di ciascun punto tocco)
  • dwTime – è il passaggio di tempo per l'evento, in millisecondi
  • dwMask : un insieme di flag di bit che specificano quali campi facoltativi nella struttura di contenere i valori validi

È importante tenere presente che le coordinate X e Y sono in centesimi di un pixel delle coordinate di schermo fisico (ad esempio centa-pixel). Questa risoluzione extra-fine promuove alta precisione e accurate scrittura a mano il riconoscimento per altre applicazioni che potrebbero richiedere tale risoluzione del bene. Ma per la maggior parte degli scenari, è necessario ricordarsi di dividere le coordinate del punto tocco X e Y per 100 per convertire le coordinate del punto di contatto alle coordinate dello schermo utilizzabile prima di iniziare utilizzando le coordinate.

A questo punto è sapere come gestire i messaggi tocco e si dispongano tutte le informazioni per passare e aggiungere logica reale al nostro gestore WM_TOUCH descritto in precedenza. Let’s Utilizzare questa conoscenza e generare un'applicazione di disegno multitouch, noto anche come tavoletta iniziale.

Verifica ID punto Touch Per creare l'applicazione iniziale Pad, è necessario tenere traccia di ogni movimento di punto di contatto e il percorso moduli e quindi disegnare una linea lungo tale tracciato. Per distinguere tra i punti di contatto diverso e assicurarsi che è effettivamente gestire ogni punto di contatto correttamente, è possibile assegnare colori diversi a ciascun punto tocco.

Dopo l'installazione del pacchetto il messaggio tocco in una matrice di strutture di input tocco, ti, è necessario controllare ogni stato del punto tocco e applicare la logica diversa per lo stato del contatto. Nell'esempio di riquadro iniziale, nuovi punti di contatto sono identificate dallo stato inattivo, TOUCHEVENTF_DOWN. È possibile registrare il nuovo ID punto tocco e assegnare a è un colore. Una volta un punto di contatto viene rimosso, TOUCHEVENTF_UP, termine il disegno ultimo e annullare la registrazione l'ID del punto di contatto. Tra verso il basso e gli eventi, verrà probabilmente visualizzato molti messaggi di spostamento, di TOUCHEVENTF_MOVE. Per ogni messaggio di spostamento, aggiungere un nuovo punto la riga esistente e disegnare del nuovo segmento della linea. Figura 7 viene illustrato l'intero WM_TOUCH gestore che è necessario per l'applicazione di iniziale Pad supportare multitouch.

Nella figura 7 WM_TOUCH gestore

case WM_TOUCH:
{
    unsigned int numInputs = (unsigned int) wParam; 
    TOUCHINPUT* ti = new TOUCHINPUT[numInputs]; 
    if(GetTouchInputInfo((HTOUCHINPUT)lParam, numInputs, ti, sizeof(TOUCHINPUT)))
    {
        // For each contact, dispatch the message to the appropriate message handler.
        for(unsigned int i=0; i< numInputs; ++i)
        {
            if(ti[i].dwFlags & TOUCHEVENTF_DOWN)
            {
               OnTouchDownHandler(hWnd, ti[i]);
            }
            else if(ti[i].dwFlags & TOUCHEVENTF_MOVE)
            {
               OnTouchMoveHandler(hWnd, ti[i]);
            }
            else if(ti[i].dwFlags & TOUCHEVENTF_UP)
            {
               OnTouchUpHandler(hWnd, ti[i]);
            }
        }
    }
    CloseTouchInputHandle((HTOUCHINPUT)lParam);
    delete [] ti;
}
break;
 

La chiave per la verifica dei punti di contatto singolo utilizza il dwID che rimane invariato tramite la durata di tratto specifico tocco. Per assegnare un questo ID nella funzione di supporto OnTouchDownHandler a un oggetto CStroke che è sostanzialmente una matrice di punti che rappresenta una riga. Questa riga è il percorso quando si trascina il dito tra il dispositivo tocco sensibili. Verranno non per coprire l'intero codice di esempio supporta l'applicazione che effettivamente disegna le righe per lo schermo. In sostanza, è possibile trovare tutto ciò che è necessario eseguire in modo da supportare multitouch nell'esempio di codice precedente.

È possibile visualizzare l'output dell'applicazione iniziale pad in Figura 8 .

fig01.gif

Figura 8 output dell'applicazione iniziale

Nel gestore caso predefinito, salvare la posizione del movimento e dai due set di punti, che rappresenta il punto di contatto corrente e quello precedente, è calcolare la posizione del centro di zoom e memorizzarlo in ptZoomCenter. È inoltre possibile calcolare il fattore di zoom calcolando il rapporto tra i due punti. Una chiamata alla funzione di supporto ProcessZoom Aggiorna le nuove coordinate per riflettere il punto di fattore e il centro di zoom.

Gestisce il resto dei movimenti di predefinito di Windows 7 è molto simile per la specifica ingrandire il movimento gestione descritta in precedenza. Tutti i movimenti seguono dello stesso flusso, e solo l'implementazione di logica interna è diverso per ogni movimento, per ogni scenario di use case. Successivamente, verranno esaminati il modello ottimale e conseguenti nell'API che consente di ricevere e gestire i raw tocco eventi.

Utilizzo di messaggi di Windows RAW Touch

Per avviare la ricezione di messaggi non elaborati tocco, WM_TOUCH, è necessario richiedere il sistema operativo avviare inviare messaggi tocco dell'applicazione e interrompere i messaggi di azione predefinita. A tale scopo, è necessario chiamare la funzione RegisterTouchWindow(HWND hWnd, ULONG uFlags). Chiamare questa funzione Registra una singola hWnd elemento (in genere una finestra) il tocco-attivazione.

Come con i movimenti, è possibile gestire i messaggi WM_TOUCH nel WndProc ’s applicazione funzione. Un singolo messaggio WM_TOUCH può contenere più diverse strutture di input “ punti di contatto messaggi ” che devono essere decompresso in una matrice di tocco. Come procedura standard, che si desidera decomprimere il messaggio WM_TOUCH in matrice di strutture TOUCHINPUT, dove ogni struttura di tale matrice rappresenta i dati da un punto singolo tocco. Per decomprimere, è necessario chiamare la funzione GetTouchInputInfo(HTOUCHINPUT hTouchInput, UINT cInputs, PTOUCHINPUT pInputs, int cbSize) e passargli il lParam del messaggio WM_TOUCH e un tocco appena creato faccia matrice, come illustrato nella Figura 6 .

Riepilogo

La piattaforma di Windows 7 multitouch è una piattaforma di sviluppo molto potente. Da implementare il supporto di movimento predefinito per i messaggi non elaborati tocco più avanzati, consente un'alimentazione con implementazione relativamente semplice notevole.

La piattaforma include anche la modifica e a inerzia processori. Le operazioni di modifica sono simili a movimenti in numerosi modi, ma sono molto più potente. Manipolazioni vengono utilizzate per semplificare le operazioni di trasformazione su qualsiasi numero specificato di oggetti. È possibile eseguire una combinazione di movimenti di componente specifico, ad esempio Ruota, zoom e scala in un oggetto specifico nello stesso momento. Il processore di modifica produce un due dimensioni “ matrice di trasformazione ” che rappresenta le trasformazioni in X e Y coordinate, la modifica della scala e la rotazione verificatisi all'oggetto nel tempo, di conseguenza lo spostamento eseguito dei punti di contatto. Dopo l'ultimo punto di contatto viene estratte, sarà necessario applicare fisica semplice all'oggetto in modo che per quanto senza problemi riguarda un arresto, anziché viene improvvisamente arrestato sul punto. Per supportare tale movimento continuo, la piattaforma multitouch Windows 7 fornisce l'API di inerzia.

Queste API è l'argomento del nostro prossimo articolo MSDN.

Yochay Kiriaty è un Technical Evangelist presso Microsoft, con particolare attenzione ai Windows 7. Ha più di un dieci anni di esperienza nello sviluppo di software. Ha scritto e informatica Education taught courses ed è un collaboratore attivoIl Blog di Windows.