Поделиться через


Устранение неполадок приложений

В этом разделе приводятся решения распространенных проблем.

Общие действия по устранению неполадок

Категория Description
Проблема Я выполняю функции Windows Server 2008 и Windows Touch не работают.
Причина Вы не включили возможности рабочего стола.
Решение Откройте средство администрирования диспетчер сервера: нажмите кнопку "Пуск", выберите пункт "Администрирование" и щелкните диспетчер сервера. Щелкните элемент "Компоненты" в левом столбце. Нажмите кнопку "Добавить компоненты" в разделе "Компоненты". Выберите "Рабочий стол", нажмите кнопку "Далее" и нажмите кнопку "Установить".

 

Категория Description
Проблема Всякий раз, когда я быстро перемещаю палец по моему приложению, появляется стрелка, и мой жест или манипуляция не регистрируются правильно.
Причина Включение мерцаний, если вам это не нужно.
Решение Вы включили мелькание, когда вы хотите, чтобы она была отключена. Дополнительные сведения об отключении пера см . в статье "Поддержка сдвига устаревших версий с помощью полос прокрутки".

 

Проблема Я не могу различить входные данные мыши и входные данные Windows Touch.
Причина Windows создает сообщения мыши для поддержки прежних версий, когда пользователь щелкает экран.
Решение Чтобы определить источник, можно вызвать GetMessageExtraInfo для WM_LBUTTONDOWN и WM_LBUTTONUP сообщений. В следующем коде показано, как это можно сделать.

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. }

 

Категория Description
Проблема Разделы справки запускать приложения Microsoft PixelSense в Windows 7?
Причина Windows Touch и Microsoft PixelSense несовместимы.
Решение Вам нужно выбрать платформу Windows 7 или платформу Microsoft PixelSense.

 

Устранение неполадок с манипуляциями и инерцией

Категория Description
Проблема Мое приложение заморозка не по какой-либо причине. При инициализации интерфейсов объектов я получаю нарушения доступа.
Причина Отсутствует вызов CoInitialize при использовании интерфейсов IManipulationProcessor или IInertiaProcessor.
Решение Это может быть вызвано создание экземпляров объектов объектной модели компонента Windows Touch (COM) без вызова CoInitialize. Иногда это происходит при преобразовании проектов из жестов в использование манипуляций или интерфейсов инерции.

 

Категория Description
Проблема Мой объект поворачивается неправильно при переводе. Поворот с одним пальцем не работает правильно.
Причина Неправильно задать сводки для объекта.
Решение Вы не настраиваете точки сводных точек манипуляции правильно. Задайте свойства PivotPointX и PivotPointY в центр объекта или точки, вокруг которой нужно повернуть, и задайте для свойства PivotRadius радиус объекта.

 

Устранение неполадок с входным вводом Windows Touch

Категория Description
Проблема После того как я обработаю сообщение WM_TOUCH , я перестаю получать отзывы о границах.
Причина Использование сообщения WM_TOUCH без обработки сообщения.
Решение Возможно, вы используете сообщение Windows Touch, не перенаправляя его в DefWindowProc, что приведет к неожиданному поведению. Дополнительные сведения о том, как правильно обрабатывать WM_TOUCH сообщения, см. в руководстве по началу работы с сообщениями Windows Touch.

 

Проблема Я в том числе windows.h, но он все еще говорит, что WM_TOUCH не определен.
Причина Неправильная версия Windows в Targetver.h.
Решение Вы не установили правильную версию Windows в проекте. В следующем коде показан правильный набор версий Windows для Windows Touch в Windows 7.
C++
#ifndef WINVER                  // Specify that the minimum required platform is Windows 7.
#define WINVER 0x0601           
#endif

 

Проблема Мои сенсорные входные x-координаты и координаты y, кажется недопустимыми. Они являются либо большими значениями, чем я ожидаю, либо они являются отрицательными значениями.
Причина Возможно, вам потребуется преобразовать точки касания в пиксели или преобразовать координаты экрана.
Решение Убедитесь, что вы вызываете TOUCH_COORD_TO_PIXEL и ScreenToClient. В следующем примере кода показано, как это сделать:
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;
          }
        }
      }

Примечание.
Чтобы использовать функцию ScreenToClient, необходимо иметь высокую поддержку DPI в приложении. Дополнительные сведения о поддержке высокого уровня DPI см. в разделе "Высокий DPI".

 

 

Категория Description
Проблема Я не вижу WM_TOUCH сообщений, но я знаю, что Windows Touch работает, потому что я вижу WM_GESTURE сообщения.
Причина Отсутствует вызов RegisterTouchWindow.
Решение WM_TOUCH и WM_GESTURE сообщения являются взаимоисключающими. Если вы не вызываете RegisterTouchWindow, вы получите только WM_GESTURE сообщения.

 

Категория Description
Проблема Я замечаю небольшие задержки с момента, когда я касаюсь пальца вниз, когда я получаю входные данные в моем приложении.
Причина Отклонение пальмы вызывает задержки ввода.
Решение Если TWF_WANTPALM задано в вызовах RegisterTouchWindow, включено отклонение ладони. Это приводит к небольшой задержке (100 мс), пока программное обеспечение проверяет, поступает ли вход из пальца, пера или ладони пользователя. Отключите отклонение ладони, вызвав RegisterTouchWindow с флагом TWF_WANTPALM очистки.

 

Устранение неполадок жестов Windows Touch

Категория Description
Проблема После обработки сообщения WM_GESTURE я перестаю получать отзывы о границах. Или жест, который работал ранее, не работает сейчас.
Причина Использование сообщения WM_GESTURE без обработки.
Решение Возможно, вы используете сообщение Windows Touch, не перенаправляя его в DefWindowProc, что приведет к неожиданному поведению. Дополнительные сведения о том, как правильно обрабатывать WM_GESTURE сообщения, см. в руководстве по началу работы с жестами Windows.

 

Категория Description
Проблема Я не вижу WM_GESTURE сообщений, но я знаю, что Windows Touch работает, потому что я вижу WM_TOUCH сообщения.
Причина Вызов RegisterTouchWindow.
Решение WM_TOUCH и WM_GESTURE сообщения являются взаимоисключающими. При вызове RegisterTouchWindow вы не получите WM_GESTURE сообщения.

 

Проблема Я не вижу все жесты, которые я ожидаю видеть. Например, я вижу жесты с идентификатором GID_PAN , но не GID_ROTATE.
Причина Некоторые жесты, такие как жест поворота, не включены по умолчанию.
Решение При получении сообщения WM_GESTURENOTIFY необходимо вызвать SetGestureConfig, как описано в справочнике по WM_GESTURENOTIFY, или добавить обработчик для сообщения WM_GESTURENOTIFY. В следующем коде показано, как можно реализовать обработчик, чтобы обеспечить поддержку поворота.

C++
Карта сообщений. 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; // Идентификатор жеста. gc.dwWant = GC_ROTATE; Команда жеста, которая включена для GID_ROTATE. gc.dwBlock = 0; Не блокируйте ничего. UINT uiGcs = 1; Число заданных жестов.

BOOL bResult = SetGestureConfig(g_hMainWnd, 0, uiGcs, &gc, sizeof(GESTURECONFIG)); if(!bResult) { // Что-то пошло не так, сообщите об ошибке с помощью предпочтительного ведения журнала. }

return 0; }

Дополнительные примеры типичных конфигураций жестов см. в разделе SetGestureConfig.

 

Категория Description
Проблема Пользовательские полосы прокрутки в моем приложении не прокручиваются при выполнении жеста сдвига.
Причина Отсутствующие обработчики для правильных сообщений WM_*SCROLL.
Решение Вы не обрабатываете все сообщения WM_*SCROLL в настраиваемых полосах прокрутки. Рекомендуется обрабатывать сообщение WM_GESTURE , а не сохранять пользовательские функции полосы прокрутки с помощью устаревшей поддержки. Вам необходимо поддерживать сообщения, как описано в разделе "Поддержка устаревших версий" для сдвига с помощью полос прокрутки.

 

Категория Description
Проблема Я получаю задержки для жестов.
Причина Flicks может привести к задержкам жестов.
Решение Flicks может привести к задержкам в течение длительного времени для получения WM_GESTURE сообщений приложения. Сведения об отключении щелков см . в разделе "Устаревшая поддержка сдвига с помощью полос прокрутки".

 

Руководство по программированию