Dépannage des applications

Cette section fournit des solutions aux problèmes courants.

Résolution de problèmes générale

Category Description
Problème j’exécute Windows les fonctionnalités du serveur 2008 et Windows Touch ne fonctionnent pas.
Cause Vous n’avez pas activé l’expérience utilisateur.
Solution Ouvrez l’outil d’administration Gestionnaire de serveur : cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Gestionnaire de serveur. Cliquez sur l’élément fonctionnalités dans la colonne de gauche. Cliquez sur Ajouter des fonctionnalités dans la section fonctionnalités . Sélectionnez expérience utilisateur, cliquez sur suivant, puis sur installer.
Category Description
Problème Chaque fois que je déplace mon doigt rapidement sur mon application, une flèche s’affiche et mon geste ou manipulation ne s’inscrit pas correctement.
Cause Les raccourcis sont activés lorsque vous n’en avez pas besoin.
Solution Les raccourcis sont activés lorsque vous souhaitez qu’ils soient désactivés. Pour plus d’informations sur la désactivation des raccourcis stylet, consultez prise en charge héritée du panorama avec des barres de défilement .
Problème je ne peux pas discerner les entrées de souris et les entrées tactiles Windows.
Cause Windows génère des messages de souris pour la prise en charge héritée lorsqu’un utilisateur clique sur l’écran.
Solution Vous pouvez appeler GetMessageExtraInfo pour les messages WM_LBUTTONDOWN et WM_LBUTTONUP afin de déterminer la source. Le code suivant illustre cette opération.

C++
#define MOUSEEVENTF_FROMTOUCH 0xFF515700

if ((GetMessageExtraInfo() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) { // Click was generated by wisptis / Windows Touch }else{ // Click was generated by the mouse. }

Category Description
Problème Comment faire exécuter des applications Microsoft PixelSense sur Windows 7 ?
Cause Windows Touch et Microsoft PixelSense sont incompatibles.
Solution vous devez cibler la plateforme Windows 7 ou la plateforme Microsoft PixelSense.

Dépannage des manipulations et de l’inertie

Category Description
Problème Mon application est figée sans raison. J’obtiens des violations d’accès quand j’Initialise mes interfaces d’objet.
Cause Appel à CoInitialize manquant lors de l’utilisation des interfaces IManipulationProcessor ou IInertiaProcessor .
Solution cela peut être dû à l’instanciation des objets COM (component Object Model) Windows tactile sans appeler coinitialize. Cela se produit parfois quand vous convertissez des projets à l’aide de gestes à l’aide des manipulations ou des interfaces d’inertie.
Category Description
Problème Mon objet est incorrectement pivoté lorsqu’il est en cours de traduction. La rotation à un seul doigt ne fonctionne pas correctement.
Cause Paramétrage incorrect des pivots sur un objet.
Solution Vous ne configurez pas correctement les points pivot de manipulation. Définissez les propriétés PivotPointX et PivotPointY au centre de l’objet ou du point autour duquel vous souhaitez faire pivoter et définissez la propriété PivotRadius sur le rayon de votre objet.

résolution des problèmes Windows entrée tactile

Category Description
Problème Après avoir traité le message WM _ Touch , je cesse d’obtenir des commentaires sur les limites.
Cause Consommation du message WM _ Touch sans le gérer.
Solution vous consommerez probablement un message Windows Touch sans le transférer à DefWindowProc, ce qui entraînera un comportement inattendu. pour plus d’informations sur la façon de gérer correctement les messages WM _ touch , consultez Prise en main avec des messages tactiles Windows .
Problème J’inclut Windows. h, mais il dit toujours que WM_TOUCH n’est pas défini.
Cause la version de Windows dans Targetver. h est incorrecte.
Solution vous n’avez pas défini la version correcte du Windows dans votre projet. le code suivant illustre les versions de Windows correctement définies pour Windows Touch dans Windows 7.
C++
#ifndef WINVER                  // Specify that the minimum required platform is Windows 7.
#define WINVER 0x0601           
#endif
Problème Les coordonnées x et y de mes entrées tactiles semblent non valides. Il s’agit de valeurs supérieures à celles attendues ou de valeurs négatives.
Cause Vous devrez peut-être convertir vos points tactiles en pixels, ou vous devrez peut-être convertir les coordonnées d’écran.
Solution Assurez-vous que vous appelez TOUCH_COORD_TO_PIXEL et ScreenToClient. Le code suivant montre comment procéder.
C++
      POINT ptInput;
      if (GetTouchInputInfo((HTOUCHINPUT)lParam, cInputs, pInputs, sizeof(TOUCHINPUT))){
        for (int i=0; i < static_cast<INT>(cInputs); i++){
          TOUCHINPUT ti = pInputs[i];                       
          if (ti.dwID != 0){                
            // Do something with your touch input handle.
            ptInput.x = TOUCH_COORD_TO_PIXEL(ti.x);
            ptInput.y = TOUCH_COORD_TO_PIXEL(ti.y);
            ScreenToClient(hWnd, &ptInput);
            points[ti.dwID][0] = ptInput.x;
            points[ti.dwID][1] = ptInput.y;
          }
        }
      }
[!Note]
Pour pouvoir utiliser la fonction ScreenToClient , vous devez disposer d’une prise en charge des résolutions élevées dans votre application. Pour plus d’informations sur la prise en charge des résolutions élevées, visitez la section haute résolution de MSDN.
Category Description
Problème je ne vois pas les messages wm _ touch , mais je sais que Windows TOUCH fonctionne parce que je vois les messages de _ mouvement wm .
Cause Appel à RegisterTouchWindowmanquant.
Solution WM _ Les messages de _ mouvement tactile et WM s’excluent mutuellement. Si vous n’appelez pas RegisterTouchWindow, vous recevrez uniquement les messages de _ mouvement WM .
Category Description
Problème Je remarque des petits retards à partir du moment où je touche mon doigt jusqu’au moment où j’obtiens une entrée dans mon application.
Cause Le rejet de Palm entraîne des retards dans l’entrée.
Solution Si TWF _ WANTPALM est défini dans les appels à RegisterTouchWindow, le rejet de Palm est activé. Cela provoque un petit délai (de 100 ms) tandis que le logiciel teste si l’entrée provient d’un doigt, d’un stylet ou de la paume de l’utilisateur. Désactivez le rejet de Palm en appelant RegisterTouchWindow avec l’indicateur TWF _ WANTPALM effacé.

résolution des problèmes Windows les gestes tactiles

Category Description
Problème Une fois le message de _ mouvement WM géré, je cesse d’obtenir des commentaires sur les limites. Ou bien, un geste qui fonctionnait précédemment ne fonctionne pas maintenant.
Cause Consommation du message de _ mouvement WM sans le gérer.
Solution vous consommerez probablement un message Windows Touch sans le transférer à DefWindowProc, ce qui entraînera un comportement inattendu. pour plus d’informations sur la façon de gérer correctement les messages de _ mouvement WM , consultez Prise en main avec des gestes de Windows .
Category Description
Problème je ne vois pas les messages de _ mouvement wm , mais je sais que Windows touch fonctionne parce que je vois les messages wm _ touch .
Cause Appel de RegisterTouchWindow.
Solution WM _ Les messages de _ mouvement tactile et WM s’excluent mutuellement. Si vous appelez RegisterTouchWindow, vous ne recevrez pas de messages de _ mouvement WM .

Problème Je ne vois pas tous les mouvements que je m’attend à voir. Par exemple, je vois des gestes avec l’identificateur GID_PAN mais pas GID_ROTATE.
Cause Certains mouvements, tels que le mouvement de rotation, ne sont pas activés par défaut.
Solution Vous devez appeler SetGestureConfig quand vous recevez un message de WM_GESTURENOTIFY comme décrit dans la référence WM_GESTURENOTIFY , ou vous devez ajouter un gestionnaire pour le message WM_GESTURENOTIFY . Le code suivant montre comment implémenter un gestionnaire pour activer la prise en charge de la rotation.

C++
// The message map.
BEGIN_MESSAGE_MAP()
    ON_WM_CREATE()
     ... ... ...
    ON_MESSAGE(WM_GESTURENOTIFY, OnWindowsGestureNotify)
END_MESSAGE_MAP()  

LRESULT CTestWndApp::OnWindowsGestureNotify( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ){ GESTURECONFIG gc; gc.dwID = GID_ROTATE; // The gesture identifier. gc.dwWant = GC_ROTATE; // The gesture command you are enabling for GID_ROTATE. gc.dwBlock = 0; // Don't block anything. UINT uiGcs = 1; // The number of gestures being set.

BOOL bResult = SetGestureConfig(g_hMainWnd, 0, uiGcs, &gc, sizeof(GESTURECONFIG)); if(!bResult) { // Something went wrong, report the error using your preferred logging. }

return 0; }

Pour obtenir plus d’exemples de configurations de mouvements typiques, consultez SetGestureConfig.

Category Description
Problème Les barres de défilement personnalisées dans mon application ne défilent pas lorsque j’effectue le mouvement panoramique.
Cause Gestionnaires manquants pour les messages de défilement WM corrects _ * .
Solution Vous ne gérez pas tous les messages de _ * défilement WM dans vos barres de défilement personnalisées. Il est recommandé de gérer le message de _ mouvement WM plutôt que de conserver les fonctionnalités de la barre de défilement personnalisée via la prise en charge héritée. Vous devez prendre en charge les messages comme détaillé dans la section prise en charge héritée du panorama avec les barres de défilement.
Category Description
Problème J’obtiens des retards pour les gestes.
Cause Les raccourcis peuvent entraîner des retards pour les gestes.
Solution Les raccourcis peuvent entraîner des retards pendant le temps nécessaire à votre application pour recevoir des messages de _ mouvement WM . Pour plus d’informations sur la désactivation des raccourcis, consultez prise en charge de l’héritage pour le panoramique avec les barres de défilement .

Guide de programmation