Objeto de aplicativo e DirectX

O objeto do aplicativo e DirectX (aplicativos do Tempo de Execução do Windows usando DirectX com C++)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente ]

Os aplicativos da Windows Store com DirectX (jogos, na maioria) não usam muitos dos elementos e objetos da nova IU do Windows. Pelo contrário, como eles são executados em um nível inferior na pilha do Tempo de Execução do Windows, devem interoperar com a estrutura da interface do usuário de forma mais fundamental: acessando e interoperando diretamente com o objeto do aplicativo. Aprenda quando e como acontece essa interoperação e como você, como desenvolvedor do DirectX, pode usar efetivamente esse modelo para desenvolver seus aplicativos da Windows Store.

Os importantes namespaces de interface do usuário básico

Primeiro, vamos anotar os namespaces do Tempo de Execução do Windows que você tem que incluir (com using) em seus aplicativos da Windows Store. Já vamos entrar em detalhes.

Observação  Se você não está desenvolvendo um aplicativo da Windows Store usando DirectX em C++, use os componentes da interface do usuário incluídos nas bibliotecas e nos namespaces específicos ao JavaScript ou XAML, em vez dos tipos fornecidos nestes namespaces.
 

Objeto de aplicativo do Tempo de Execução do Windows

Em seu aplicativo da Windows Store, é melhor ter uma janela e um provedor de visualização para a exibição e ao qual conectar sua cadeia de permuta (buffers de vídeo). Você também pode associar essa exibição a eventos específicos de janelas de seu aplicativo em execução. Para obter a janela pai do objeto de aplicativo, definida pelo tipo CoreWindow, crie um tipo que implemente IFrameworkViewSource, como fizemos no trecho de código anterior.

Veja aqui o conjunto básico de etapas para obter uma janela usando a estrutura da interface do usuário básica:

  1. Crie um tipo que implemente IFrameworkView. Esta é a sua exibição.

    Nesse tipo, defina:

    • Um método Initialize que tenha como parâmetro uma instância de CoreApplicationView. Você pode obter uma instância desse tipo chamando CoreApplication.CreateNewView. O objeto de aplicativo chama o método quando o aplicativo é iniciado.
    • Um método SetWindow que tenha como parâmetro uma instância de CoreWindow. Você pode obter uma instância desse tipo acessando a propriedade CoreWindow em sua nova instância CoreApplicationView.
    • Um método Load que tem como único parâmetro uma cadeia de ponto de entrada. O objeto de aplicativo fornece a cadeia de ponto de entrada quando você chama esse método. É aqui que você configura os recursos. Você cria os recursos de dispositivo aqui. O objeto do aplicativo chama o método quando o aplicativo é iniciado.
    • Um método Run que ativa o objeto CoreWindow e inicia o dispatcher de eventos de janela. O objeto de aplicativo chama o método quando o processo do aplicativo é iniciado.
    • Um método Uninitialize que limpa os recursos configurados na chamada para Load. O objeto de aplicativo chama esse método quando o aplicativo é fechado.
  2. Crie um tipo que implemente IFrameworkViewSource. Este é o seu provedor de modo de exibição.

    Nesse tipo, defina:

    • Um método nomeado CreateView que retorne uma instância de sua implementação IFrameworkView, como criada na etapa 1.
  3. Passe uma instância do provedor de modo de exibição para CoreApplication.Run de main.

Com essas noções básicas em mente, vamos examinar mais opções que você tem para incrementar essa abordagem.

Tipos de interfaces do usuário básicas

Estes são os tipos de interfaces do usuário básicas no Tempo de Execução do Windows que talvez possam ser úteis para você:

Você pode usar esses tipos para acessar a exibição do seu aplicativo, especificamente, os bits que desenham o conteúdo da janela pai do aplicativo, e para tratar dos eventos disparados para essa janela. O processo da janela do aplicativo é um ASTA (Single-Threaded Apartment Application) que é isolado e que trata de retornos de chamada.

A exibição de seu aplicativo é gerada pelo provedor de exibição da janela do aplicativo, e na maioria dos casos será implementada por um pacote de estrutura específica ou pelo próprio sistema, assim você não precisa implementá-la. Para o DirectX, você precisa implementar um provedor de modo de exibição dinâmica, como discutido anteriormente. Há uma relação 1 a1 específica entre os seguintes componentes e comportamentos:

  • Um modo de exibição de aplicativo, que é representado pelo tipo CoreApplicationView e que define os métodos para atualizar a janela.
  • Um ASTA, a atribuição do que define o comportamento de threading do aplicativo. Você não pode criar instâncias de tipo atribuídos a COM STA em um ASTA.
  • Um provedor de modo de exibição, que o seu aplicativo obtém do sistema ou que você implementa.
  • Uma janela pai, que é representada pelo tipo CoreWindow.
  • Fornecimento de todos os eventos de ativação. Os dois modos de exibição e as janelas têm eventos de ativação separados.

Em resumo, o objeto de aplicativo fornece uma fábrica de provedores de visualização. Ele cria um provedor de modo de exibição e uma instância de uma janela pai para o aplicativo. O provedor de modo de exibição define o modo de exibição do aplicativo para a janela pai do aplicativo. Agora, vamos analisar as especificidades do modo de exibição e da janela pai.

Comportamentos e propriedades de CoreApplicationView

CoreApplicationView representa o modo de exibição atual do aplicativo. O singleton do aplicativo cria o modo de exibição do aplicativo durante a inicialização, mas o modo de exibição permanece inativo até ser ativado. Você pode obter a classe CoreWindow que mostra o modo de exibição acessando a propriedade CoreApplicationView.CoreWindow nela e pode tratar de eventos de ativação e desativação do modo de exibição registrando delegados com o evento CoreApplicationView.Activated.

Comportamentos e propriedades de CoreView

A janela pai, que é uma instância CoreWindow, é criada e passada para o provedor de modo de exibição quando o objeto de aplicativo é inicializado. Se o aplicativo tem uma janela para exibição, ele a exibe; caso contrário, simplesmente inicializa o modo de exibição.

CoreWindow fornece um número de eventos específicos a comportamentos de janelas básicas e de entrada. Você pode tratar desses eventos registrando seus próprios delegados com eles.

Você também pode obter o dispatcher de eventos da janela acessando a propriedade CoreWindow.Dispatcher, que fornece uma instância de CoreDispatcher.

Comportamentos e propriedades de CoreDispatcher

Você pode determinar o comportamento de threading do evento para o envio de uma janela com o tipo CoreDispatcher. Neste tipo, há um método particularmente importante: o método CoreDispatcher.ProcessEvents, que inicia o processamento do evento da janela. Chamar esse método com a opção errada para o seu aplicativo pode levar a todos os tipos de comportamentos de processamento de eventos inesperados.

Opção CoreProcessEventsOptionDescrição
CoreProcessEventsOption.ProcessOneAndAllPending Envie todos os eventos disponíveis atualmente na fila. Se não houver eventos pendentes, aguarde o próximo novo evento.
CoreProcessEventsOption.ProcessOneIfPresent Envie um evento se ele estiver pendente na fila. Se não houver eventos pendentes, não espere por um novo evento ser gerado, retorne imediatamente.
CoreProcessEventsOption.ProcessUntilQuit Aguarde novos eventos e envie todos os eventos disponíveis. Continue esse comportamento até que a janela seja fechada ou o aplicativo chame o método Close na instância CoreWindow.
CoreProcessEventsOption.ProcessAllIfPresent Envie todos os eventos disponíveis atualmente na fila. Se não houver eventos pendentes, retorne imediatamente.

 

Os aplicativos da Windows Store usando DirectX têm que utilizar a opção CoreProcessEventsOption.ProcessAllIfPresent para evitar comportamentos de bloqueio que possam interromper atualizações gráficas.

 

 

Mostrar:
© 2016 Microsoft