Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
As APIs de manipulação direta permitem criar ótimas experiências de movimento panorâmico, zoom e arrastamento do 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 do processamento de entrada off-thread, teste opcional de acerto de entrada off-thread e previsão de entrada/saída.
Qualquer aplicativo que use a Manipulação Direta para processar interações por toque exibe as animações fluidas do Windows 8 e os comportamentos de feedback de interação que estão em conformidade com as Diretrizes de para interações comuns do usuário.
Público do desenvolvedor
A API de manipulação direta destina-se a programadores experientes que conhecem C/C++, têm uma sólida compreensão do Component Object Model (COM) 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 bits e 64 bits.
Porquê usar DirectManipulation
Lida com as interações de forma direta e consistente
A Manipulação Direta funciona pré-declarando 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. No tempo de execução, a entrada é então associada a essa região/objeto por meio de uma simples chamada de API. A partir deste ponto, 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.
Crie aplicações táteis responsivas
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 do aplicativo, renderização, layout e qualquer outra coisa que consuma ciclos no processador.
Flexibilidade de implementação
As interfaces incluídas no Direct Manipulation fornecem suporte abrangente para manipulação de entrada, reconhecimento de interação, notificações de feedback e atualizações da interface do usuário. As interfaces também incorporam serviços do sistema, como DirectComposition.
Conceitos básicos
A implementação mais básica de manipulação direta consiste em um viewport, de conteúdo e interações . O viewport é uma região capaz de receber e processar entradas de interações do usuário. É também a região do conteúdo que é visível para o utilizador final. O conteúdo é o objeto real que os usuários finais podem ver e é o que se move ou dimensiona em resposta a uma interação do usuário. As interações do usuário principal (também conhecidas como manipulações ) suportadas pela 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árias viewports (cada uma com seu próprio conteúdo) podem ser configuradas em uma única janela para criar uma experiência de interface do usuário rica.
Esta 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. Este objeto é um wrapper em torno DirectComposition, que é o compositor do sistema. O objeto é responsável por aplicar as transformações de saída e conduzir atualizações visuais.
Um contato representa um ponto de contato identificado pelo pointerId fornecido na mensagem WM/_POINTERDOWN . Quando uma mensagem WM_POINTERDOWN é recebida, o aplicativo chama SetContact. O aplicativo notifica a manipulação direta sobre os contatos que devem ser manipulados e o(s) visor(es) que deve(m) reagir a esses contatos. A entrada por teclado e mouse tem valores especiais pointerId para que possam ser manipulados adequadamente pela manipulação direta.
No nosso caso básico acima, quando SetContact é chamado algumas coisas acontecem:
- Quando o usuário executa um movimento panorâmico, uma mensagem WM/_POINTERCAPTURECHANGED é enviada para o aplicativo para notificar que o contato foi consumido pela manipulação direta.
- Quando o usuário move os movimentos, o visor dispara eventos de atualização que são usados pelo DirectComposition wrapper para direcionar atualizações visuais para a tela. Para um usuário que faz movimento panorâmico em um visor, o conteúdo parecerá mover-se suavemente sob o contato.
- Quando o usuário levanta o contato, ele vê o conteúdo continuar a se mover à medida que transita para uma animação de inércia, desacelerando gradualmente até chegar ao seu local de repouso final.
Processamento de entrada de teclado e mouse
A Manipulação Direta permite que as mensagens de teclado e mouse sejam encaminhadas manualmente a partir do thread da interface do usuário do aplicativo por meio da APIProcessInput, de modo que possam ser tratadas adequadamente pela Manipulação Direta.
DirectManipulation e o HWND
A manipulação direta está associada a um HWND do Win32 para receber e processar mensagens de entrada de ponteiro para essa janela. À medida que a Manipulação Direta calcula os valores de saída, ela faz retornos de chamada assíncronos para a Manipulação Direta o Modelo de Objeto de Componente (COM) objetos que são 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 Ativar.