Estrutura TOUCHINPUT (winuser.h)

Encapsula dados para entrada por toque.

Sintaxe

typedef struct tagTOUCHINPUT {
  LONG      x;
  LONG      y;
  HANDLE    hSource;
  DWORD     dwID;
  DWORD     dwFlags;
  DWORD     dwMask;
  DWORD     dwTime;
  ULONG_PTR dwExtraInfo;
  DWORD     cxContact;
  DWORD     cyContact;
} TOUCHINPUT, *PTOUCHINPUT;

Membros

x

A coordenada x (ponto horizontal) da entrada touch. Esse membro é indicado em centésimos de um pixel de coordenadas de tela físicas.

y

A coordenada y (ponto vertical) da entrada por toque. Esse membro é indicado em centésimos de um pixel de coordenadas de tela físicas.

hSource

Um identificador de dispositivo para o dispositivo de entrada de origem. Cada dispositivo recebe um provedor exclusivo em tempo de execução pelo provedor de entrada por toque. Consulte a seção Exemplos abaixo.

dwID

Um identificador de ponto de toque que distingue uma entrada de toque específica. Esse valor permanece consistente em uma sequência de contatos por toque a partir do ponto em que um contato aparece até que ele volte para cima. Uma ID pode ser reutilizado posteriormente para contatos subsequentes.

dwFlags

Um conjunto de sinalizadores de bits que especificam vários aspectos de pressionamento, liberação e movimento do ponto de toque. Os bits neste membro podem ser qualquer combinação razoável dos valores na seção Comentários.

dwMask

Um conjunto de sinalizadores de bits que especificam quais dos campos opcionais na estrutura contêm valores válidos. A disponibilidade de informações válidas nos campos opcionais é específica do dispositivo. Os aplicativos devem usar um valor de campo opcional somente quando o bit correspondente for definido em dwMask. Esse campo pode conter uma combinação dos sinalizadores dwMask mencionados na seção Comentários.

dwTime

O carimbo de data/hora do evento, em milissegundos. O aplicativo de consumo deve observar que o sistema não executa nenhuma validação nesse campo; quando o sinalizador TOUCHINPUTMASKF_TIMEFROMSYSTEM não está definido, a precisão e o sequenciamento de valores nesse campo dependem completamente do provedor de entrada por toque.

dwExtraInfo

Um valor adicional associado ao evento de toque.

cxContact

A largura da área de contato por toque em centésimos de pixel em coordenadas de tela físicas. Esse valor só será válido se o membro dwMask tiver o sinalizador TOUCHEVENTFMASK_CONTACTAREA definido.

cyContact

A altura da área de contato por toque em centésimos de pixel em coordenadas de tela físicas. Esse valor só será válido se o membro dwMask tiver o sinalizador TOUCHEVENTFMASK_CONTACTAREA definido.

Comentários

A tabela a seguir lista os sinalizadores para o membro dwFlags .

Sinalizador Valor Descrição
TOUCHEVENTF_MOVE 0x0001 O movimento ocorreu. Não pode ser combinado com TOUCHEVENTF_DOWN.
TOUCHEVENTF_DOWN 0x0002 O ponto de toque correspondente foi estabelecido por meio de um novo contato. Não pode ser combinado com TOUCHEVENTF_MOVE ou TOUCHEVENTF_UP.
TOUCHEVENTF_UP 0x0004 Um ponto de toque foi removido.
TOUCHEVENTF_INRANGE 0x0008 Um ponto de toque está no intervalo. Esse sinalizador é usado para habilitar o suporte ao foco de toque em hardware compatível. Aplicativos que não desejam suporte para focalização podem ignorar esse sinalizador.
TOUCHEVENTF_PRIMARY 0x0010 Indica que essa estrutura TOUCHINPUT corresponde a um ponto de contato primário. Consulte o texto a seguir para obter mais informações sobre pontos de toque primários.
TOUCHEVENTF_NOCOALESCE 0x0020 Quando recebida usando GetTouchInputInfo, essa entrada não foi agrupada.
TOUCHEVENTF_PEN 0x0040 O evento de toque foi disparado por um dispositivo de caneta.
TOUCHEVENTF_PALM 0x0080 O evento de toque foi disparado pela palma da mão do usuário.
 
Nota Se o hardware de destino em um computador não oferecer suporte ao foco, quando o sinalizador TOUCHEVENTF_UP estiver definido, o sinalizador TOUCHEVENTF_INRANGE será limpo. Se o hardware de destino em um computador der suporte ao foco, os sinalizadores TOUCHEVENTF_UP e TOUCHEVENTF_INRANGE serão definidos de forma independente.
 
A tabela a seguir lista os sinalizadores para o membro dwMask .
Sinalizador Valor Descrição
TOUCHINPUTMASKF_CONTACTAREA 0x0004 cxContact e cyContact são válidos. Consulte o texto a seguir para obter mais informações sobre pontos de toque primários.
TOUCHINPUTMASKF_EXTRAINFO 0x0002 dwExtraInfo é válido.
TOUCHINPUTMASKF_TIMEFROMSYSTEM 0x0001 A hora do sistema foi definida na estrutura TOUCHINPUT .
 

Um ponto de toque é designado como primário quando é o primeiro ponto de toque a ser estabelecido de um estado anterior sem pontos de toque. O sinalizador TOUCHEVENTF_PRIMARY continua a ser definido para todos os eventos subsequentes para o ponto de toque primário até que o ponto de toque primário seja liberado. Observe que um evento TOUCHEVENTF_UP no ponto de toque primário não designa necessariamente o fim de uma operação do Windows Touch; a operação atual do Windows Touch prossegue do estabelecimento do ponto de toque primário até que o último ponto de toque seja liberado.

Observe que um ponto de toque solitário ou, em um conjunto de pontos de toque simultâneos, o primeiro a ser detectado, é designado como primário. A posição do mouse do sistema segue o ponto de toque primário e, além de mensagens de toque, também gera mensagens de WM_LBUTTONDOWN, WM_MOUSEMOVE e WM_LBUTTONUP em resposta a ações em um ponto de toque primário. O ponto de toque primário também pode gerar mensagens WM_RBUTTONDOWN e WM_RBUTTONUP usando o gesto de pressionar e segurar.

Observe que o identificador de ponto de toque pode ser dinâmico e está associado a um determinado ponto de toque, desde que o ponto de toque persista. Se o contato for interrompido e retomado (por exemplo, se um dedo for removido da superfície e pressionado novamente), o mesmo ponto de toque (o mesmo dedo, caneta ou outro dispositivo desse tipo) poderá receber um identificador de ponto de toque diferente.

O tipo a seguir é definido para representar um ponteiro constante para uma estrutura TOUCHINPUT .


   typedef TOUCHINPUT const * PCTOUCHINPUT;
    

Exemplos

Nota No exemplo a seguir, a matriz pInputs não é classificada. Use o valor dwID para rastrear pontos de toque específicos.
 
UINT cInputs = LOWORD(wParam);
PTOUCHINPUT pInputs = new TOUCHINPUT[cInputs];
if (NULL != pInputs)
{
    if (GetTouchInputInfo((HTOUCHINPUT)lParam,
                          cInputs,
                          pInputs,
                          sizeof(TOUCHINPUT)))
    {
        // process pInputs
        if (!CloseTouchInputHandle((HTOUCHINPUT)lParam))
        {
            // error handling
        }
    }
    else
    {
        // GetLastError() and error handling
    }
    delete [] pInputs;
}
else
{
    // error handling, presumably out of memory
}
return DefWindowProc(hWnd, message, wParam, lParam);

O exemplo a seguir mostra como obter as informações do dispositivo do membro hSource . Este exemplo usa GetRawInputDevice para recuperar informações sobre o dispositivo.

for (UINT i = 0; i < cInputs; i++){
  TOUCHINPUT ti = pInputs[i];      
  RID_DEVICE_INFO info;
  ZeroMemory(&info, sizeof(RID_DEVICE_INFO));
  info.cbSize = sizeof(RID_DEVICE_INFO);
  UINT size = 0;
  if (GetRawInputDeviceInfo(ti.hSource, RIDI_DEVICEINFO, &info, &size)){
  }else{
    DWORD err = GetLastError();
  }
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 R2 [somente aplicativos da área de trabalho]
Cabeçalho winuser.h (inclua Windows.h)

Confira também

GetTouchInputInfo

Estruturas