Compartir a través de


Cómo activar una aplicación (DirectX y C++)

En este tema se muestra cómo definir la experiencia de activación para una aplicación DirectX de la Plataforma universal de Windows (UWP).

Registro del controlador de eventos de activación de la aplicación

En primer lugar, regístrese para controlar el evento CoreApplicationView::Activated, que se genera cuando el sistema operativo inicia e inicializa la aplicación.

Agregue este código a la implementación del método IFrameworkView::Initialize del proveedor de vistas (denominado MyViewProvider en el ejemplo):

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

}

Activación de la instancia de CoreWindow para la aplicación

Cuando tu aplicación se inicia, debes obtener una referencia a la CoreWindow de tu aplicación. CoreWindow contiene el distribuidor de mensajes de eventos de ventana que usa la aplicación para procesar eventos de ventana. Obtenga esta referencia en la devolución de llamada para el evento de activación de la aplicación llamando a CoreWindow::GetForCurrentThread. Una vez que haya obtenido esta referencia, active la ventana de la aplicación principal llamando a CoreWindow::Activate.

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

Iniciar el procesamiento del mensaje de evento para la ventana principal de la aplicación

Las devoluciones de llamada se producen cuando el CoreDispatcher procesa los mensajes de eventos para el CoreWindowde la aplicación. Este callback no se invocará si no llamas a CoreDispatcher::ProcessEvents desde el main loop de tu aplicación (implementado en el método IFrameworkView::Run de tu proveedor de vistas).

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