앱 활성화 방법(DirectX 및 C++)

Applies to Windows and Windows Phone

이 항목에서는 DirectX 및 C++를 사용하는 Windows 런타임 앱에 대한 활성화 환경을 정의하는 방법을 보여 줍니다.

앱 활성화 이벤트 처리기 등록

먼저 운영 체제에 의해 앱이 시작되고 초기화될 때 발생하는 CoreApplicationView::Activated 이벤트를 처리하도록 등록합니다.

  • Applies to Windows Phone

참고  Windows Phone에서 이 메서드는 앱이 현재 일시 중단된 경우에도 사용자가 시작 타일이나 앱 목록에서 앱을 시작할 때마다 호출됩니다. 앱은 활성화 매개 변수를 확인하고, 새 매개 변수를 사용하여 시작될 때 이전 환경을 계속할지 또는 새 화면을 표시할지 결정해야 합니다.

뷰 공급자(이 예에서는 MyViewProvider)의 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
    )
{

   // ...

    applicationView->Activated +=
        ref new TypedEventHandler<CoreApplicationView^, IActivatedEventArgs^>(this, &DirectXApp::OnActivated);

   // ...

}


앱용 CoreWindow 인스턴스 활성화

앱이 시작되면 앱에 대한 CoreWindow 참조를 획득해야 합니다. CoreWindow에는 앱이 창 이벤트를 처리하는 데 사용하는 창 이벤트 메시지 디스패처가 포함되어 있습니다. CoreWindow::GetForCurrentThread를 호출하여 앱 활성화 이벤트에 대한 콜백에서 이 참조를 획득합니다. 이 참조를 획득한 후에는 다음을 수행합니다.

  • 주 앱 창 활성화 이벤트 CoreWindow::Activated에 대한 이벤트 처리기를 만들고 첨부합니다. 이 이벤트는 주 앱 창이 초점을 얻거나 잃을 때 발생합니다.
  • CoreWindow::Activate를 호출하여 주 앱 창을 활성화합니다.


void MyViewProvider::OnActivated(
    _In_ CoreApplicationView^ /* applicationView */,
    _In_ IActivatedEventArgs^ /* args */
    )
{
    CoreWindow::GetForCurrentThread()->Activated +=
        ref new TypedEventHandler<CoreWindow^, WindowActivatedEventArgs^>(this, &MyViewProvider::OnWindowActivationChanged);
    CoreWindow::GetForCurrentThread()->Activate();
}


주 앱 창 상태에 대한 변경 처리

이제 주 앱 창(CoreWindow) 상태에 대한 변경을 처리하기 위한 메서드를 구현합니다. 다음 예의 상태 처리를 살펴보세요.

전체 CoreWindow 상태 모음이 CoreWindowActivationState에 열거됩니다.



void MyViewProvider::OnWindowActivationChanged(
    _In_ Windows::UI::Core::CoreWindow^ /* sender */,
    _In_ Windows::UI::Core::WindowActivatedEventArgs^ args
    )
{
    if (args->WindowActivationState == CoreWindowActivationState::Deactivated)
    {
        // CoreWindow does not have focus
    }
    else if (args->WindowActivationState == CoreWindowActivationState::CodeActivated
        || args->WindowActivationState == CoreWindowActivationState::PointerActivated)
    {
        // CoreWindow has focus
    }
}


주 앱 창에 대한 이벤트 메시지 처리 시작

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