Freigeben über


So wird's gemacht: Aktivieren einer App (DirectX und C++)

In diesem Thema wird erläutert, wie Sie die Aktivierungsoberfläche für eine DirectX-App für die universelle Windows-Plattform (UWP) definieren.

Registrieren des App-Aktivierungsereignishandlers

Registrieren Sie sich zunächst für die Behandlung des CoreApplicationView::Activated-Ereignisses, das ausgelöst wird, wenn Ihre App vom Betriebssystem gestartet und initialisiert wird.

Fügen Sie diesen Code zur Implementierung der IFrameworkView::Initialize Methode Ihres Ansichtsanbieters hinzu (benannt MyViewProvider im Beispiel):

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

}

Aktivieren der CoreWindow-Instanz für die App

Wenn Ihre App gestartet wird, müssen Sie einen Verweis auf die CoreWindow- für Ihre App abrufen. CoreWindow- enthält den Nachrichtendispatcher für Fensterereignisse, den Ihre App zum Verarbeiten von Fensterereignissen verwendet. Rufen Sie diesen Verweis in Ihrem Rückruf für das App-Aktivierungsereignis ab, indem Sie CoreWindow::GetForCurrentThreadaufrufen. Nachdem Sie diesen Verweis abgerufen haben, aktivieren Sie das Hauptanwendungsfenster, indem Sie CoreWindow::Activateaufrufen.

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

Bearbeitung der Ereignisnachricht für das Hauptfenster der App beginnen

Ihre Rückrufe treten auf, wenn Ereignismeldungen vom CoreDispatcher- für die CoreWindow-der App verarbeitet werden. Dieser Callback wird nicht aufgerufen, wenn Sie nicht CoreDispatcher::ProcessEvents aus der Hauptschleife Ihrer App aufrufen (in der IFrameworkView::Run Methode Ihres Ansichtsanbieters implementiert).

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