Como retomar um aplicativo (DirectX e C++)

Applies to Windows and Windows Phone

Este tópico mostra como restaurar dados importantes do aplicativo quando o sistema retoma o aplicativo do Tempo de Execução do Windows em DirectX com C++.

Registrar o manipulador de eventos retomado

Registre para manipular o evento CoreApplication::Resuming, que indica que o usuário alternou para outro aplicativo que não o seu e, depois, de volta.

Adicione este código a sua implementação do método IFrameworkView::Initialize de seu provedor de visualizaçao (nomeado DirectXAppno exemplo):



using namespace concurrency;
using namespace Windows::ApplicationModel;
using namespace Windows::ApplicationModel::Activation;
using namespace Windows::ApplicationModel::Core;
using namespace Windows::UI::Core;
using namespace Windows::UI::ViewManagement;

MyViewProvider::MyViewProvider() :
    // class fields
    // ...
    bool m_visible;
    bool m_windowsClosed;
{

}

void MyViewProvider::Initialize(
    _In_ CoreApplicationView^ applicationView
    )
{

   // ...

   CoreApplication::Resuming +=
       ref new EventHandler<Platform::Object^>(this, &MyViewProvider::OnResuming);

   // ...
}

Atualizar conteúdo exibido após a suspensão

Quando o seu aplicativo manipula o evento Resuming, ele tem a oportunidade de atualizar o seu conteúdo exibido. Restaure qualquer aplicativo que você tenha salvado com seu manipulador para CoreApplication::Suspending, e reinicie o processamento. Desenvolvedores de jogos: se você suspendeu seu mecanismo de áudio, agora é o momento de reiniciá-lo.


void MyViewProvider::OnResuming(
    _In_ Platform::Object^ /* sender */,
    _In_ Platform::Object^ /* args */
    )
{
    // restore app state, restart rendering/processing and refresh the display
}

Esta chamada de retorno ocorre como uma mensagem de evento processada pelo CoreDispatcher para o CoreWindowdo aplicativo. Essa chamada de retorno não será solicitada se você não chamar o CoreDispatcher::ProcessEvents a partir do loop principal do aplicativo (implementado no método IFrameworkView::Run de seu provedor de visualização).


// m_visible and m_windowsClose are class-level bool variables on MyViewProvider.

// ...

void MyViewProvider::Run()
{
    // your app's main loop!
    while (!m_windowClosed) // the app window is NOT closed
    {
        if (m_visible) // and if the app window is visible
        {
            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(
                                                           CoreProcessEventsOption::ProcessAllIfPresent
                                                           );
        }
        else 
        {
            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(
                                                           CoreProcessEventsOption::ProcessOneAndAllPending
                                                           );
        }
    }
}

Comentários

O sistema suspende o aplicativo quando o usuário alterna para outro aplicativo ou área de trabalho. O sistema retoma o aplicativo quando o usuário alterna de volta para ele. Quando o sistema retoma o aplicativo, o conteúdo das estruturas de dados e variáveis é o mesmo como era antes do sistema suspender o aplicativo. O sistema restaura o aplicativo exatamente para onde estava, para que ele apareça para o usuário como se estivesse executando em tela de fundo. Porém, o aplicativo pode ter sido suspenso durante um período de tempo significativo, assim ele deve atualizar qualquer conteúdo exibido que pode ter alterado enquanto o aplicativo estava suspenso,e reinicie quaisquer threads de renderização ou processamento de áudio. Se você salvou quaisquer dados de estado de jogo durante um evento suspenso anterior, o restaure agora.

Tópicos relacionados

Como suspender um aplicativo (DirectX e C++)
Como ativar um aplicativo (DirectX e C++)
Diretrizes para suspender e retomar o aplicativos
Ciclo de vida do aplicativo (aplicativos da Loja)

 

 

Mostrar:
© 2014 Microsoft