如何繼續應用程式 (DirectX 和 C++)

Applies to Windows and Windows Phone

這個主題說明如何在系統恢復使用 DirectX 搭配 C++ 的 Windows 執行階段應用程式時,還原重要的應用程式資料。

登錄繼續事件處理常式

登錄以處理 CoreApplication::Resuming 事件,它指示使用者跳出然後又返回您的應用程式。

將這個程式碼新增到檢視提供者 (在這個範例中為 DirectXApp) 的 IFrameworkView::Initialize 方法實作中:



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

   // ...
}

暫停之後重新整理顯示的內容

當您的應用程式處理繼續事件時,就會有機會重新整理它自己的已顯示內容。請還原任何您已經使用 CoreApplication::Suspending 的處理常式儲存的應用程式,然後重新啟動處理。遊戲裝置:如果您已經暫停音訊引擎,現在就是重新啟動它的時候。


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

這個回呼會以應用程式 CoreWindowCoreDispatcher 所處理之事件訊息的形式發生。如果您沒有從應用程式的主迴圈 (實作於檢視提供者的 IFrameworkView::Run 方法中) 呼叫 CoreDispatcher::ProcessEvents,就不會叫用這個回呼。


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

備註

當使用者切換至另一個應用程式或桌面時,系統會暫停您的應用程式。當使用者切換回您的應用程式時,系統就會繼續執行應用程式。當系統繼續執行您的應用程式時,您的變數和資料結構內容和系統暫停應用程式之前一樣,沒有變化。系統會將應用程式回復成暫停之前的相同狀態,如此使用者會以為應用程式一直在背景中執行。不過,應用程式可能已經暫停一段相當長的時間,所以它應該重新整理在應用程式暫停期間可能已經變更的任何顯示內容,並且重新啟動任何轉譯或音訊處理執行緒。如果您在先前的暫停事件期間儲存了任何遊戲狀態資料,請現在還原它。

相關主題

如何暫停應用程式 (DirectX 和 C++)
如何啟用應用程式 (DirectX 和 C++)
應用程式暫停和繼續的指導方針
應用程式週期 (市集應用程式)

 

 

顯示:
© 2014 Microsoft