Prise en main avec des Messages tactiles Windows

cette section explique les tâches associées à l’obtention d’une entrée tactile Windows pour fonctionner dans votre application.

les étapes suivantes sont généralement effectuées lorsque vous travaillez avec des messages Windows Touch :

  1. Testez les fonctionnalités du digitaliseur d’entrée.
  2. inscrivez-vous pour recevoir des messages Windows Touch.
  3. Gérer les messages.

le message utilisé pour Windows touch est WM _ touch. Ce message indique les différents États de contact avec un digitaliseur.

Test des fonctionnalités du digitaliseur d’entrée

La fonction GetSystemMetrics peut être utilisée pour interroger les fonctionnalités du digitaliseur d’entrée en passant la valeur nIndex du _ digitaliseur SM. GetSystemMetrics retourne un champ de bits qui indique si l’appareil est prêt, si ce dernier prend en charge pen ou touch, si le périphérique d’entrée est intégré ou externe, et si l’appareil prend en charge plusieurs entrées (Windows touch). Le tableau suivant présente les bits des différents champs.

bit 8 7 6 5 4 3 2 1
Valeur Pile prête Entrée multiple Réservé Réservé Stylet externe Stylet intégré Interaction tactile externe Fonctions tactiles intégrées

Pour tester le résultat de la commande pour une fonctionnalité particulière, vous pouvez utiliser l’opérateur de & au niveau du bit et le bit particulier que vous testez. par exemple, pour tester Windows Touch, vous devez vérifier que le bit de septième ordre est défini (0x40 en hex). L’exemple de code suivant montre comment ces valeurs peuvent être testées.

#include <windows.h>
// test for touch
int value = GetSystemMetrics(SM_DIGITIZER);
if (value & NID_READY){ /* stack ready */}
if (value  & NID_MULTI_INPUT){
    /* digitizer is multitouch */ 
    MessageBoxW(hWnd, L"Multitouch found", L"IsMulti!", MB_OK);
}
if (value & NID_INTEGRATED_TOUCH){ /* Integrated touch */}

Le tableau suivant répertorie les constantes définies dans Windows. h pour le test des fonctions tactiles du digitaliseur d’entrée.

Nom Valeur Description
configuration de tablette _ _ aucune 0x00000000 Le digitaliseur d’entrée n’a pas de fonctionnalités tactiles.
fonction _ tactile intégrée nid _ 0x00000001 Un digitaliseur tactile intégré est utilisé pour l’entrée.
_ _ interface tactile externe nid 0x00000002 Un digitaliseur tactile externe est utilisé pour l’entrée.
_ _ stylet intégré nid 0x00000004 Un digitaliseur de stylet intégré est utilisé pour l’entrée.
_ _ stylet externe nid 0x00000008 Un digitaliseur de stylet externe est utilisé pour l’entrée.
NID _ multi- _ entrée 0x00000040 Un digitaliseur d’entrée avec prise en charge de plusieurs entrées est utilisé pour l’entrée.
NID _ prêt 0x00000080 Le digitaliseur d’entrée est prêt pour l’entrée. Si cette valeur est non définie, cela peut signifier que le service tablette est arrêté, que le digitaliseur n’est pas pris en charge ou que les pilotes du digitaliseur n’ont pas été installés.

La vérification des _ * valeurs nid est un moyen utile de vérifier les capacités de l’ordinateur d’un utilisateur à configurer votre application pour l’entrée tactile, Pen ou non-tablette. Par exemple, si vous disposez d’une interface utilisateur dynamique et que vous souhaitez configurer automatiquement une partie de celle-ci, vous pouvez vérifier la valeur _ tactile intégrée nid _ , nid _ tactile et peut obtenir le nombre maximal de touches à la première fois qu’un utilisateur exécute votre application.

Notes

Il existe certaines limitations inhérentes à SM _ GETSYSTEMMETRICS. Par exemple, le plug-and-Play n’est pas pris en charge. Pour cette raison, soyez prudent lors de l’utilisation de cette fonction comme moyen de configuration permanente.

inscription pour recevoir Windows entrée tactile

avant de recevoir des entrées tactiles Windows, les applications doivent d’abord s’inscrire pour recevoir Windows entrée tactile. En inscrivant la fenêtre de l’application, l’application indique qu’elle est compatible avec le toucher. une fois que l’application a inscrit sa fenêtre, les notifications du pilote Windows Touch sont transmises à l’application lorsque l’entrée est effectuée dans la fenêtre. Lorsque l’application s’arrête, elle annule l’inscription de sa fenêtre pour désactiver les notifications.

Notes

WM _ Les messages TACTILEs sont actuellement « gourmands ». Une fois le premier message tactile reçu dans une fenêtre, tous les messages tactiles sont envoyés à cette fenêtre jusqu’à ce qu’une autre fenêtre reçoive le focus.

Notes

Par défaut, vous recevez des messages de _ mouvement WM au lieu de messages WM _ Touch . Si vous appelez RegisterTouchWindow, vous ne recevrez plus de messages de _ mouvement WM .

le code suivant montre comment une application peut s’inscrire pour recevoir des messages Windows Touch dans une application Win32.

RegisterTouchWindow(hWnd, 0);

gestion des Messages Windows Touch

vous pouvez gérer les messages tactiles Windows à partir d’applications dans des systèmes d’exploitation Windows de nombreuses façons. Si vous programmez une application GUI, vous ajoutez du code dans la WndProc fonction pour gérer les messages qui vous intéressent. Si vous programmez une application MFC (Microsoft Foundation Class) ou une application managée, vous ajoutez des gestionnaires pour les messages qui vous intéressent. l’exemple de code suivant montre comment les messages tactiles peuvent être gérés à partir de WndProc dans une application basée sur Windows.

  LRESULT OnTouch(HWND hWnd, WPARAM wParam, LPARAM lParam ){
    BOOL bHandled = FALSE;
    UINT cInputs = LOWORD(wParam);
    PTOUCHINPUT pInputs = new TOUCHINPUT[cInputs];
    if (pInputs){
        if (GetTouchInputInfo((HTOUCHINPUT)lParam, cInputs, pInputs, sizeof(TOUCHINPUT))){
            for (UINT i=0; i < cInputs; i++){
                TOUCHINPUT ti = pInputs[i];
                //do something with each touch input entry
            }            
            bHandled = TRUE;
        }else{
             /* handle the error here */
        }
        delete [] pInputs;
    }else{
        /* handle the error here, probably out of memory */
    }
    if (bHandled){
        // if you handled the message, close the touch input handle and return
        CloseTouchInputHandle((HTOUCHINPUT)lParam);
        return 0;
    }else{
        // if you didn't handle the message, let DefWindowProc handle it
        return DefWindowProc(hWnd, WM_TOUCH, wParam, lParam);
    }
  }


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

    switch (message)
    {
      // pass touch messages to the touch handler 
      case WM_TOUCH:
        OnTouch(hWnd, wParam, lParam);
        break;

Le code suivant montre comment vous pouvez implémenter la table des messages et un gestionnaire de messages. Notez que les messages doivent être déclarés dans la table des messages, puis que le gestionnaire du message doit être implémenté. Par exemple, dans une application MFC, elle peut être déclarée dans le code de la boîte de dialogue. Notez également que la OnInitDialog fonction pour votre fenêtre de boîte de dialogue doit inclure un appel à RegisterTouchWindow , par exemple RegisterTouchWindow(m_hWnd, 0) .

  // Class implementations within a dialog
  LRESULT TestDlg::OnTouch( WPARAM wParam, LPARAM lParam ){
    //Insert handler code here to do something with the message or uncomment the following line to test
    //MessageBox(L"touch!", L"touch!", MB_OK);
    return 0;
  }
  // The message map
  BEGIN_MESSAGE_MAP()
    ON_WM_CREATE()
    ... ... ...
    ON_MESSAGE(WM_TOUCH, OnTouch)
  END_MESSAGE_MAP()  
 
  BOOL TestDlg::OnInitDialog()
  {
    CDialog::OnInitDialog();    

    RegisterTouchWindow(m_hWnd, 0);
     ... ... ...
  }  
  

Le toucher de la fenêtre indique les touches à partir d’une fenêtre indépendante.

Windows Entrée tactile