Cómo activar una aplicación (DirectX y C++)
En este tema se muestra cómo definir la experiencia de activación de una aplicación DirectX para la Plataforma universal de Windows (UWP).
Registrar el controlador de eventos de activación de la aplicación
Primero, haz un registro para controlar el evento CoreApplicationView::Activated, que se activa cuando el sistema operativo inicia e inicializa la aplicación.
Agrega 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);
//...
}
Activar 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 la aplicación usa para procesar eventos de ventana. Obtén esta referencia en la devolución de llamada del evento de activación de la aplicación con una llamada a CoreWindow::GetForCurrentThread. Después de obtener esta referencia, activa la ventana de aplicación principal con una llamada a CoreWindow::Activate.
void App::OnActivated(CoreApplicationView^ applicationView, IActivatedEventArgs^ args)
{
// Run() won't start until the CoreWindow is activated.
CoreWindow::GetForCurrentThread()->Activate();
}
Iniciar el mensaje de evento de procesamiento para la ventana de aplicación principal
Las devoluciones de llamada se producen a medida que CoreDispatcher procesa los mensajes de eventos para el elemento CoreWindow de la aplicación. Esta devolución de llamada no se invocará si no llamas a CoreDispatcher::ProcessEvents 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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de