Manipulação direta
As APIs de Manipulação Direta permitem que você crie ótimas experiências de panorâmica, zoom e arrastar o usuário. Para fazer isso, ele processa a entrada por toque em uma região ou objeto, gera transformações de saída e aplica as transformações aos elementos da interface do usuário. Você pode usar a Manipulação Direta para otimizar a capacidade de resposta e reduzir a latência por meio de processamento de entrada fora do thread, teste de ocorrência de entrada fora do thread opcional e previsão de entrada/saída.
Qualquer aplicativo que usa Manipulação Direta para processar interações por toque exibe as animações fluidas Windows 8 e os comportamentos de comentários de interação que estão em conformidade com as Diretrizes para interações comuns do usuário.
Público-alvo do desenvolvedor
A API de Manipulação Direta é para desenvolvedores experientes que conhecem C/C++, têm uma compreensão sólida do COM (Component Object Model) e estão familiarizados com os conceitos de programação do Windows.
Requisitos de tempo de execução
A Manipulação Direta foi introduzida no Windows 8. Ele está incluído nas versões de 32 e 64 bits.
Por que usar DirectManipulation
Lida com interações de maneira simples e consistente
A Manipulação Direta funciona declarando previamente os comportamentos e interações de uma região ou objeto. Por exemplo, uma página da Web geralmente é configurada para panorâmica e zoom. Em runtime, a entrada é associada a essa região/objeto por meio de uma chamada à API simples. Desse ponto em diante, a Manipulação Direta faz todo o trabalho pesado de processar a entrada, aplicar restrições e personalidade e gerar as transformações de saída.
Criar aplicativos de toque responsivos
Para otimizar a capacidade de resposta e minimizar a latência, o processamento de Manipulação Direta ocorre em um thread separado e independente do thread da interface do usuário. Como resultado, as transformações de saída podem ser executadas em paralelo à atividade no thread da interface do usuário. A atividade de thread da interface do usuário pode incluir lógica de aplicativo, renderização, layout e qualquer outra coisa que consuma ciclos no processador.
Flexibilidade de implementação
As interfaces incluídas na Manipulação Direta fornecem suporte abrangente para tratamento de entrada, reconhecimento de interação, notificações de comentários e atualizações de interface do usuário. As interfaces também incorporam serviços do sistema, como DirectComposition.
Conceitos básicos
A implementação mais básica da Manipulação Direta consiste em um visor, conteúdo e interações. O visor é uma região que é capaz de receber e processar entradas de interações do usuário. Também é a região do conteúdo visível para o usuário final. O conteúdo é o objeto real que os usuários finais podem ver e é o que move ou dimensiona em resposta a uma interação do usuário. As interações primárias do usuário (também conhecidas como manipulações) compatíveis com a Manipulação Direta são movimento panorâmico e zoom. Essas interações aplicam uma transformação de tradução ou escala ao conteúdo dentro do visor, respectivamente. Vários visores (cada um com seu próprio conteúdo) podem ser configurados em uma única janela para criar uma experiência de interface do usuário avançada.
Essa figura mostra uma implementação básica de Manipulação Direta antes e depois do movimento panorâmico.
Durante a inicialização da Manipulação Direta, um objeto DCompDirectManipulationCompositor é instanciado e associado à Manipulação Direta. Esse objeto é um wrapper em torno de DirectComposition, que é o compositor do sistema. O objeto é responsável por aplicar as transformações de saída e impulsionar atualizações visuais.
Um contato representa um ponto de toque identificado pela pointerId fornecida na mensagem WM/_POINTERDOWN . Quando uma mensagem de WM_POINTERDOWN é recebida, o aplicativo chama SetContact. O aplicativo notifica a Manipulação Direta sobre os contatos que devem ser tratados e os visores que devem reagir a esses contatos. A entrada do teclado e do mouse tem valores de pointerId especiais para que possam ser manipulados adequadamente pela Manipulação Direta.
Em nosso caso básico acima, quando SetContact é chamado, algumas coisas acontecem:
- Quando o usuário executa uma panorâmica, uma mensagem de WM/_POINTERCAPTURECHANGED é enviada ao aplicativo para notificar que o contato foi consumido pela Manipulação Direta.
- Quando o usuário move as movimentações, o visor dispara eventos de atualização que são usados pelo wrapper DirectComposition para direcionar atualizações visuais para a tela. Para um usuário com movimento panorâmico em um visor, o conteúdo parecerá se mover sem problemas sob o contato.
- Quando o usuário levanta o contato, o usuário vê o conteúdo continuar a se mover à medida que faz a transição para uma animação de inércia, desacelerando gradualmente até chegar ao local de descanso final.
Processamento de entrada de teclado e mouse
A Manipulação Direta permite que as mensagens de teclado e mouse sejam encaminhadas manualmente do thread da interface do usuário do aplicativo por meio da API ProcessInput , de modo que possam ser tratadas adequadamente pela Manipulação Direta.
DirectManipulation e o HWND
A Manipulação Direta está associada a um HWND win32 para receber e processar mensagens de entrada de ponteiro para essa janela. À medida que a Manipulação Direta computa valores de saída, ela faz retornos de chamada assíncronos para os objetos COM (Direct Manipulation Component Object Model) implementados no aplicativo. Esses retornos de chamada informam o aplicativo sobre a transformação que foi aplicada aos objetos . A Manipulação Direta é ativada no HWND especificado chamando Activate.