Partager via


Comment activer une application (DirectX et C++)

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

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

Tout d’abord, inscrivez le gestionnaire de l’événement CoreApplicationView::Activated, lequel est déclenché au démarrage et à l’initialisation de votre application par le système d’exploitation.

Ajoutez le code suivant à votre implémentation de la méthode IFrameworkView::Initialize de votre fournisseur d’affichage (nommé 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 à l’objet CoreWindow de votre application. CoreWindow contient le répartiteur de message d’événement de fenêtre utilisé par votre application 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. Après avoir 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();
}

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

Vos rappels ont lieu en tant que messages d’événements traités par l’objet CoreDispatcher pour l’objet CoreWindow de l’application. Ce rappel n’est pas effectué si vous n’appelez pas CoreDispatcher::ProcessEvents à partir de la boucle principale de votre application (mise en œuvre dans la méthode IFrameworkView::Run de votre fournisseur d’affichage).

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