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 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 se inicia la aplicación, debes obtener una referencia a CoreWindow para la 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 a medida que CoreDispatcher procesa los mensajes de evento para CoreWindow de la aplicación. Esta devolución de llamada no se invocará si no llamas a CoreDispatcher::P rocessEvents desde el bucle principal de la aplicación (implementado en el método IFrameworkView::Run del 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);
}
}
}
Temas relacionados