Поддержка сенсорного ввода в Windows Vista

Начиная с Windows Vista, технология планшетного ПК поддерживает сенсорный ввод на планшетных компьютерах с дигитайзерами с поддержкой сенсорного ввода. Эта поддержка включает в себя улучшенный пользовательский интерфейс, помогающий в нацеливание на Windows и управление ими при использовании пальца для ввода данных.

Поддержка сенсорного дигитайзера

Ввод с помощью пера и сенсорного ввода не исключаем

Не предполагайте, что ввод с помощью пера и сенсорного ввода является взаимоисключающим в приложениях InkCollector, InkOverlay и RealTimeStylus .

В Windows Vista, когда система распознает перо, она игнорирует сенсорный ввод. То есть сенсорный штрих заканчивается и начинается росчерк пера. Так как это может измениться в будущем, код не должен предполагать, что ввод пера и сенсорного ввода являются взаимоисключающими.

Другие источники сообщений мыши

Существуют и другие источники сообщений мыши, даже если пользователь взаимодействует только с помощью пальца или пера. Источники включают сенсорные панели, а также движения, предназначенные для того, чтобы приложение за многоуровневым окном учитывало, что мышь перемещается над приложением.

Включение и отключение пользовательского интерфейса сенсорного ввода

Вы можете включить или отключить пользовательский интерфейс сенсорного ввода в зависимости от требований приложения. Для этого перехватите сообщения окна операционной системы в процедуре окна и измените сообщение Windows. Переопределите WndProc в приложении, чтобы перехватить эти сообщения. В следующем псевдокоде C# показано, как включить и отключить пользовательский интерфейс сенсорного ввода. В коде также показано использование той же методики для отключения жеста нажатия и удержания. Этот метод также работает для отключения пера.

const int WM_TABLET_QUERY_SYSTEM_GESTURE_STATUS = 716;

const uint SYSTEM_GESTURE_STATUS_NOHOLD           = 0x00000001;
const uint SYSTEM_GESTURE_STATUS_TOUCHUI_FORCEON  = 0x00000100;
const uint SYSTEM_GESTURE_STATUS_TOUCHUI_FORCEOFF = 0x00000200;

protected override void WndProc(ref Message msg)
{
    switch (msg.Msg)
    {
        case WM_TABLET_QUERY_SYSTEM_GESTURE_STATUS:
        {
            uint result = 0;
            if (...)
            {
                result |= SYSTEM_GESTURE_STATUS_NOHOLD;
            }

            if (...)
            {
                result |= SYSTEM_GESTURE_STATUS_TOUCHUI_FORCEON;
            }

            if (...)
            {
                result |= SYSTEM_GESTURE_STATUS_TOUCHUI_FORCEOFF;
            }

            msg.Result = (IntPtr)result;
        }
        break;

        default:
            base.WndProc(ref msg);
            break;
    }
}

Windows Touch