Problembehandlung bei Anwendungen

In diesem Abschnitt finden Sie Lösungen für häufige Probleme.

Allgemeine Problembehandlung

Category BESCHREIBUNG
Problem Ich führe Windows Server 2008 aus, und Windows Touch-Features funktionieren nicht.
Ursache Sie haben die Desktopdarstellung nicht aktiviert.
Lösung Öffnen Sie das Server-Manager Verwaltungstool: Klicken Sie auf Start, zeigen Sie auf Verwaltung, und klicken Sie dann auf Server-Manager. Klicken Sie in der linken Spalte auf das Element Features . Klicken Sie im Abschnitt Features auf Features hinzufügen. Wählen Sie Desktopdarstellung aus, klicken Sie auf Weiter, und klicken Sie dann auf Installieren.

 

Category BESCHREIBUNG
Problem Wenn ich meinen Finger schnell über meine Anwendung bewege, wird ein Pfeil angezeigt, und meine Geste oder Manipulation wird nicht ordnungsgemäß registriert.
Ursache Flimmern ist aktiviert, wenn Sie sie nicht benötigen.
Lösung Sie haben Flicks aktiviert, wenn Sie möchten, dass sie deaktiviert werden. Informationen zum Deaktivieren von Stiftstreifen finden Sie unter Legacyunterstützung für Verschiebungen mit Bildlaufleisten .

 

Problem Ich kann nicht zwischen Mauseingabe und Windows-Toucheingabe unterscheiden.
Ursache Windows generiert Mausnachrichten für legacy-Unterstützung, wenn ein Benutzer auf den Bildschirm klickt.
Lösung Sie können GetMessageExtraInfo für die WM_LBUTTONDOWN aufrufen und nachrichten WM_LBUTTONUP , um die Quelle zu bestimmen. Der folgende Code zeigt, wie dies geschehen kann.

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 BESCHREIBUNG
Problem Gewusst wie Microsoft PixelSense-Anwendungen unter Windows 7 ausführen?
Ursache Windows Touch und Microsoft PixelSense sind inkompatibel.
Lösung Sie müssen entweder die Windows 7-Plattform oder die Microsoft PixelSense-Plattform als Ziel verwenden.

 

Problembehandlung bei Manipulationen und DerEnträgheit

Category BESCHREIBUNG
Problem Meine Anwendung friert grundlos ein. Ich erhalte Zugriffsverletzungen, wenn ich meine Objektschnittstellen initialisiere.
Ursache Bei Verwendung der IManipulationProcessor- oder IInertiaProcessor-Schnittstelle fehlt ein Aufruf von CoInitialize.
Lösung Dies kann durch instanziieren der Windows Touch Component Object Model (COM)-Objekte ohne Aufrufen von CoInitialize verursacht werden. Dies geschieht manchmal, wenn Sie Projekte von der Verwendung von Gesten in die Verwendung der Manipulationen oder DerTrägheitsschnittstelle konvertieren.

 

Category BESCHREIBUNG
Problem Mein Objekt dreht sich nicht ordnungsgemäß, wenn es übersetzt wird. Die Drehung mit nur einem Finger funktioniert nicht ordnungsgemäß.
Ursache Falsches Festlegen von Pivots für ein Objekt.
Lösung Sie richten die Bearbeitungs-Pivotpunkte nicht ordnungsgemäß ein. Legen Sie die Eigenschaften PivotPointX und PivotPointY auf die Mitte des Objekts oder Punkts fest, um das Bzw. den Sie drehen möchten, und legen Sie die PivotRadius-Eigenschaft auf den Radius Ihres Objekts fest.

 

Problembehandlung bei Windows-Toucheingaben

Category BESCHREIBUNG
Problem Nachdem ich die WM_TOUCH-Nachricht verarbeitet habe, erhalte ich keine Begrenzungsfeedback mehr.
Ursache Verwenden der WM_TOUCH Nachricht, ohne sie zu behandeln.
Lösung Wahrscheinlich verwenden Sie eine Windows Touch-Nachricht, ohne sie an DefWindowProc weiterzuleiten, was zu unerwartetem Verhalten führt. Weitere Informationen zur ordnungsgemäßen Behandlung WM_TOUCH Nachrichten finden Sie unter Erste Schrittemit Windows-Touchnachrichten.

 

Problem Ich ziehe windows.h ein, aber es heißt immer noch, dass WM_TOUCH nicht definiert ist.
Ursache Die Windows-Version in Targetver.h ist falsch.
Lösung Sie haben in Ihrem Projekt nicht die richtige Windows-Version festgelegt. Der folgende Code veranschaulicht die ordnungsgemäß festgelegten Windows-Versionen für Windows Touch in Windows 7.
C++
#ifndef WINVER                  // Specify that the minimum required platform is Windows 7.
#define WINVER 0x0601           
#endif

 

Problem Meine X-Koordinaten und y-Koordinaten für die Toucheingabe scheinen ungültig zu sein. Sie sind entweder größer als erwartet oder negative Werte.
Ursache Möglicherweise müssen Sie Ihre Touchpunkte in Pixel konvertieren, oder Sie müssen möglicherweise die Bildschirmkoordinaten konvertieren.
Lösung Stellen Sie sicher, dass Sie TOUCH_COORD_TO_PIXEL und ScreenToClient aufrufen. Dies wird im folgenden Code veranschaulicht.
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;
          }
        }
      }

Hinweis:
Um die ScreenToClient-Funktion verwenden zu können, müssen Sie in Ihrer Anwendung über Unterstützung für hohe DPI-Werte verfügen. Weitere Informationen zur Unterstützung hoher DPI-Werte finden Sie im Abschnitt Hohe DPI von MSDN.

 

 

Category BESCHREIBUNG
Problem Ich sehe keine WM_TOUCH Nachrichten, aber ich weiß, dass Windows Touch funktioniert, weil ich WM_GESTURE Nachrichten sehe.
Ursache Es fehlt ein Aufruf von RegisterTouchWindow.
Lösung WM_TOUCH und WM_GESTURE Nachrichten schließen sich gegenseitig aus. Wenn Sie RegisterTouchWindow nicht aufrufen, erhalten Sie nur WM_GESTURE Nachrichten.

 

Category BESCHREIBUNG
Problem Ich beschreibe kleine Verzögerungen von der Zeit, in der ich meinen Finger berührt, bis ich Eingaben in meiner Anwendung erhalte.
Ursache Die Palm-Ablehnung verursacht Verzögerungen bei der Eingabe.
Lösung Wenn TWF_WANTPALM in Aufrufen von RegisterTouchWindow festgelegt ist, ist die Palm-Ablehnung aktiviert. Dies verursacht eine kleine Verzögerung (100 ms), während die Software testet, ob die Eingabe von einem Finger, Stift oder der Handfläche des Benutzers stammt. Deaktivieren Sie die Palmenabweisung, indem Sie RegisterTouchWindow mit deaktiviertem TWF_WANTPALM-Flag aufrufen.

 

Problembehandlung bei Windows-Touchgesten

Category BESCHREIBUNG
Problem Nachdem ich die WM_GESTURE-Nachricht verarbeitet habe, erhalte ich keine Begrenzungsfeedback mehr. Oder eine Geste, die zuvor funktioniert hat, funktioniert jetzt nicht.
Ursache Verwenden der WM_GESTURE Nachricht, ohne sie zu behandeln.
Lösung Sie verwenden wahrscheinlich eine Windows Touch-Nachricht, ohne sie an DefWindowProc weiterzuleiten, was zu unerwartetem Verhalten führt. Weitere Informationen zum ordnungsgemäßen Umgang mit WM_GESTURE Nachrichten finden Sie unter Erste Schritte mit Windows-Gesten.

 

Category BESCHREIBUNG
Problem Ich sehe keine WM_GESTURE Nachrichten, aber ich weiß, dass Windows Touch funktioniert, weil ich WM_TOUCH Nachrichten sehe.
Ursache Aufruf von RegisterTouchWindow.
Lösung WM_TOUCH und WM_GESTURE Nachrichten schließen sich gegenseitig aus. Wenn Sie RegisterTouchWindow aufrufen, erhalten Sie keine WM_GESTURE Nachrichten.

 

Problem Ich sehe nicht alle Gesten, die ich erwarte. Beispielsweise werden Gesten mit dem Bezeichner GID_PAN , aber nicht GID_ROTATE angezeigt.
Ursache Einige Gesten, z. B. die Drehgeste, sind standardmäßig nicht aktiviert.
Lösung Sie müssen SetGestureConfig aufrufen, wenn Sie eine WM_GESTURENOTIFY Nachricht erhalten, wie in der WM_GESTURENOTIFY Referenz beschrieben, oder Sie müssen einen Handler für die WM_GESTURENOTIFY Nachricht hinzufügen. Der folgende Code zeigt, wie ein Handler implementiert werden kann, um die Unterstützung für die Drehung zu aktivieren.

C++
Die Nachrichtenzuordnung. 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; // Der Gestenbezeichner. gc.dwWant = GC_ROTATE; Der Gestenbefehl, den Sie für GID_ROTATE aktivieren. gc.dwBlock = 0; Blockieren Sie nichts. UINT uiGcs = 1; Die Anzahl der festzulegenden Gesten.

BOOL bResult = SetGestureConfig(g_hMainWnd, 0, uiGcs, &gc, sizeof(GESTURECONFIG)); if(!bResult) { // Es ist ein Fehler aufgetreten, melden Sie den Fehler mithilfe Ihrer bevorzugten Protokollierung. }

return 0; }

Weitere Beispiele für typische Gestenkonfigurationen finden Sie unter SetGestureConfig.

 

Category BESCHREIBUNG
Problem Die benutzerdefinierten Bildlaufleisten in meiner Anwendung scrollen nicht, wenn ich die Schwenkbewegung ausführe.
Ursache Fehlende Handler für die richtige WM_*SCROLL-Nachrichten.
Lösung Sie verarbeiten nicht alle WM_*SCROLL-Nachrichten in Ihren benutzerdefinierten Bildlaufleisten. Es wird empfohlen, die WM_GESTURE-Nachricht zu behandeln, anstatt die benutzerdefinierte Scrollleistenfunktionalität über legacy-Unterstützung beizubehalten. Sie müssen Nachrichten unterstützen, wie im Abschnitt Legacyunterstützung für das Verschieben mit Bildlaufleisten beschrieben.

 

Category BESCHREIBUNG
Problem Ich erhalte Verzögerungen für Gesten.
Ursache Flicken kann zu Verzögerungen bei Gesten führen.
Lösung Flicks können zu Verzögerungen führen, wie lange es dauert, bis Ihre Anwendung WM_GESTURE Nachrichten empfängt. Informationen zum Deaktivieren von Flicks finden Sie unter Legacyunterstützung für das Verschieben mit Bildlaufleisten .

 

Programmierhandbuch