情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 用の Direct3D アプリから [戻る] ボタンが押されたことを検出する方法

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 のみ

 

ここでは、ユーザーがWindows Phone Direct3D アプリ の [戻る] ボタンを押したことを検出する方法について説明します。

Windows Phone 管理されているアプリ は、1 つまたは複数のページで構成されています。ユーザーがアプリ内を移動すると、オペレーティング システムはユーザーが閲覧したページのスタックを維持します。ユーザーが [戻る] ボタンを押すと、アプリは最初のページに到達するまで、自動的に 1 つずつ前のページに戻ります。バック スタックにそれ以上ページがないときにユーザーが [戻る] ボタンを押すと、アプリは終了します。Windows Phone アプリを終了させる方法はこの方法だけです。

Windows Phone Direct3D アプリ はページを使用しないため、ナビゲーション履歴は保持されません。ゲームの場合、単一のループが存在し、アプリがスタート画面、一時停止メニュー、ゲーム自体など、レンダリングするコンテンツを決定します。既定では、Direct3D アプリ で [戻る] ボタンを押すと、アプリは管理されているアプリ の最初のページと同様に終了します。ユーザーが [戻る] ボタンを押してゲームを一時指定し、一時停止メニューを表示できるようにする場合は、BackPressed() イベントをサブスクライブする必要があります。このイベントのハンドラーでは、関連するイベント引数の Handled() プロパティを true に設定できます。これにより、システムでキーの押下が無視され、アプリは終了しません。アプリがスタート画面にあり、前に戻る操作に意味がない場合は、Handled() プロパティを false (既定値) のままにしておきます。アプリは、ユーザーが予期しているとおりに終了します。

Direct3D アプリでの [戻る] ボタンの押下の検出

  1. 新しい Direct3D プロジェクトを作成します。この例では、プロジェクトに、“NativeFundamentals” という名前が付けられていることを前提にしています。

  2. NativeFundamentals.h ヘッダー ファイルで、BackPressed() イベントのハンドラーを宣言します。また、[戻る] ボタンが押されたときに、アプリが移動するかどうかを示すメンバー変数を宣言します。

    
    	void OnBackButtonPressed(Platform::Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ args);
    
    
    
  3. NativeFundamentals.cpp で、Windows.Phone.UI.Input 名前空間への参照を追加します。

    
    using namespace Windows::Phone::UI::Input;
    
    
    
  4. NativeFundamentals.cpp 内で、プロジェクト テンプレートと共に含まれている OnActivated メソッドで、BackPressed() イベントのハンドラーをフックします。

    
    	HardwareButtons::BackPressed += ref new EventHandler<BackPressedEventArgs^>(this, &NativeFundamentals::OnBackButtonPressed);   
    
    
    
  5. OnBackButtonPressed イベント ハンドラーで、アプリでナビゲーションを実行する必要があるかどうかを確認します。必要がある場合は、Handled()true に設定し、ナビゲーションを実行します。必要がない場合は、Handled()false に設定したままにすると、アプリケーションは終了します。

    
    void NativeFundamentals::OnBackButtonPressed(Object^ sender, BackPressedEventArgs^ args)
    {
    	if (m_MyAppCanNavigate) 
    	{
            args->Handled = true;
            DoNavigation();
        } else {
            // Do nothing. Leave args->Handled set to the current value, false.
        }
    }
    
    
    

表示: