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.
Este tópico mostra como definir a experiência de ativação para um aplicativo DirectX da Plataforma Universal do Windows (UWP).
Registrar o manipulador de eventos de ativação do aplicativo
Primeiro, registre-se para manipular o evento CoreApplicationView::Activated, que é gerado quando seu aplicativo é iniciado e inicializado pelo sistema operacional.
Adicione este código à sua implementação do IFrameworkView::Initialize método do seu provedor de exibição (chamado MyViewProvider no exemplo):
void App::Initialize(CoreApplicationView^ applicationView)
{
// Register event handlers for the app lifecycle. This example includes Activated, so that we
// can make the CoreWindow active and start rendering on the window.
applicationView->Activated +=
ref new TypedEventHandler<CoreApplicationView^, IActivatedEventArgs^>(this, &App::OnActivated);
//...
}
Ativar a instância CoreWindow para o aplicativo
Quando a sua aplicação começa, deve obter uma referência ao CoreWindow para a sua aplicação. CoreWindow contém o dispatcher de mensagens de eventos de janela que seu aplicativo usa para processar eventos de janela. Obtenha essa referência no callback para o evento de ativação da aplicação chamando CoreWindow::GetForCurrentThread. Depois de obter essa referência, ative a janela principal do aplicativo chamando CoreWindow::Activate.
void App::OnActivated(CoreApplicationView^ applicationView, IActivatedEventArgs^ args)
{
// Run() won't start until the CoreWindow is activated.
CoreWindow::GetForCurrentThread()->Activate();
}
Iniciar o processamento da mensagem de evento para a janela principal do aplicativo
As suas chamadas de retorno ocorrem quando as mensagens de evento são processadas pelo CoreDispatcher para o CoreWindow do aplicativo. Este callback não será invocado se não for chamado CoreDispatcher::ProcessEvents a partir do loop principal da tua aplicação (implementado no método IFrameworkView::Run do teu fornecedor de visualização).
// This method is called after the window becomes active.
void App::Run()
{
while (!m_windowClosed)
{
if (m_windowVisible)
{
CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);
m_main->Update();
if (m_main->Render())
{
m_deviceResources->Present();
}
}
else
{
CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending);
}
}
}
Tópicos relacionados