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


Поддержка сенсорного ввода в 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