Como ativar um aplicativo (DirectX e C++)
Este tópico mostra como definir a experiência de ativação para um aplicativo UWP (Plataforma Universal do Windows) DirectX.
Registrar o manipulador de eventos de ativação do aplicativo
Primeiro, registre para manipular o evento CoreApplicationView::Activated que é acionado quando seu aplicativo é iniciado e inicializado pelo sistema operacional.
Adicione este código à sua implementação do método IFrameworkView::Initialize de seu provedor de visualização (nomeado 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 do CoreWindow para o aplicativo
Quando seu aplicativo é iniciado, você deve obter uma referência ao CoreWindow para ele. CoreWindow inclui o dispatcher de mensagem de eventos de janela que seu aplicativo usa para processar os eventos da janela. Obtenha essa referência no retorno de chamada do evento de ativação do aplicativo chamando CoreWindow::GetForCurrentThread. Depois que você obtiver 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 a mensagem do evento de processamento para a janela do aplicativo principal
Seus retornos de chamada ocorrem como mensagens de evento que são processadas pelo CoreDispatcher para o CoreWindow do aplicativo. Essa chamada de retorno não será solicitada se você não chamar o CoreDispatcher::ProcessEvents no loop principal do aplicativo (implementado no método IFrameworkView::Run de seu provedor 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