Partager via


Comment activer une application (DirectX et C++)

Cette rubrique montre comment définir l’expérience d’activation d’une application DirectX plateforme Windows universelle (UWP).

Inscrire le gestionnaire d’événements d’activation d’application

Tout d’abord, inscrivez-vous pour gérer l’événement CoreApplicationView ::Activated , déclenché lorsque votre application est démarrée et initialisée par le système d’exploitation.

Ajoutez ce code à votre implémentation de la méthode IFrameworkView ::Initialize de votre fournisseur de vues (nommée MyViewProvider dans l’exemple) :

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);
  
  //...

}

Activer l’instance CoreWindow pour l’application

Au démarrage de votre application, vous devez obtenir une référence à CoreWindow pour votre application. CoreWindow contient le répartiteur de messages d’événement de fenêtre que votre application utilise pour traiter les événements de fenêtre. Obtenez cette référence dans votre rappel pour l’événement d’activation d’application en appelant CoreWindow ::GetForCurrentThread. Une fois que vous avez obtenu cette référence, activez la fenêtre principale de l’application en appelant CoreWindow ::Activate.

void App::OnActivated(CoreApplicationView^ applicationView, IActivatedEventArgs^ args)
{
    // Run() won't start until the CoreWindow is activated.
    CoreWindow::GetForCurrentThread()->Activate();
}

Démarrer le traitement du message d’événement pour la fenêtre principale de l’application

Vos rappels se produisent lorsque les messages d’événement sont traités par CoreDispatcher pour CoreWindow de l’application. Ce rappel ne sera pas appelé si vous n’appelez pas CoreDispatcher ::P rocessEvents à partir de la boucle principale de votre application (implémenté dans la méthode IFrameworkView ::Run de votre fournisseur de vues).

// 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);
        }
    }
}