共用方式為


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

本主題說明如何定義 Universal Windows Platform (UWP) DirectX 應用程式的啟用體驗。

註冊應用程式啟用事件處理常式

首先,註冊以處理 CoreApplicationView::Activated 事件,此事件會在您的應用程式啟動後由作業系統初始化時引發。

將此程式碼新增至檢視提供者的 IFrameworkView::Initialize (範例中名為 MyViewProvider) 的實作:

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

}

啟動應用程式的 CoreWindow 執行個體

當應用程式啟動時,您必須取得應用程式的 CoreWindow。 CoreWindow,包含您的應用用於處理視窗事件的視窗事件消息分發程式。 呼叫 CoreWindow::GetForCurrentThread,在應用程式啟用事件的回呼中取得此參考。 取得此參照後,請呼叫 CoreWindow::Activate,啟動主應用程式視窗。

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

開始處理主應用程式視窗的事件訊息

您的回呼會在應用程式的 CoreWindow,由 CoreDispatcher 處理事件訊息時發生。 如果您沒有從應用程式的主回圈 (在檢視提供者的 IFrameworkView::Run 方法中實作) 呼叫 CoreDispatcher::ProcessEvents,將不會呼叫此回呼。

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