Text Picker

DirectX(8.1)で Picker で選択した TEXT FILE を表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの作成

  1. DirectX(8.1)で Picker を使って選択した TEXT FILE を表示します。
    Direct2D の制御の流れ(DirectXPage⇒App1Main⇒SampleFpsTextRenderer)と String^ のリレー です。
    Windows 8.1 2Dプロジェクト を参照してベースとなる XAML のプロジェクトを構築して下さい。
  2. DirectXPage.xaml をダブルクリックしてレイアウトウインドウを表示します。
    ツールボックスからウインドウの上部に Button を貼り付けます。
    ボタンクリックの Event Handler("Button_Click") を設定して下さい。
  3. DirectXPage.xaml.h に TEXT メッセージを保存する領域を定義します。
        private:
            ・・・
            Platform::String^   m_text;
    
  4. DirectXPage.xaml.cpp の Button_Click に Picker を使って TEXT FILE を選択するコードを書きます。
    m_text が TEXT FILE から入力したデータで、これを m_main->SetText(m_text); で App1Main にリレーします。
    選択する TEXT FILE には、簡単なメッセージをタイプして下さい。
    全角文字を含む Shift-JIS のファイルを選択するとエラーになります。
    void App1::DirectXPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
    {
        auto open = ref new FileOpenPicker();
        open->SuggestedStartLocation = PickerLocationId::Desktop;
        open->FileTypeFilter->Clear();
        open->FileTypeFilter->Append(".txt");
        create_task(open->PickSingleFileAsync()).then([this](StorageFile^ file)
        {   return FileIO::ReadTextAsync(file);
        }).then([this](task<String^> previousTask)
        {   try
            {   m_text = previousTask.get();
                m_main->SetText(m_text);
            }
            catch (...)
            {
                OutputDebugString(L"X-FILE not found");
            }
        });
    }
    
  5. App1Main.h に TEXT メッセージを受け取るメソッドと領域を定義します。
        public:
            ・・・
            void SetText(Platform::String^ text);
        
        private:
            ・・・
            Platform::String^   m_text;
    
  6. App1Main.cpp に SetText() メソッドを追加します。
    受け取ったメッセージは SampleFpsTextRenderer にリレーします。
    void App1Main::SetText(Platform::String^ text)
    {
        m_text = text;
        m_fpsTextRenderer->SetText(m_text); 
    }
    
  7. Content\SampleFpsTextRenderer.h に TEXT メッセージを受け取るメソッドを定義します。
    ここには m_text; の領域が最初から定義されています。
        public:
            ・・・
            void SetText(Platform::String^ text);
        private:
            ・・・
            std::wstring        m_text;
    
  8. Content\SampleFpsTextRenderer.cpp に TEXT メッセージを受け取るメソッドを追加します。
    OutputDebugString() でメッセージが届いたことを確認しています。
    void SampleFpsTextRenderer::SetText(Platform::String^ text)
    {   m_text = text->Data();
        OutputDebugString(m_text.data());
    }
    
  9. Update() メソッドの次の行をコメントアウトすると、届いたメッセージが表示されます。
    メッセージのサイズに合わせて、最大幅や最大高さや座標を調整して下さい。
    void SampleFpsTextRenderer::Update(DX::StepTimer const& timer)
    {
        // 表示するテキストを更新します。
        uint32 fps = timer.GetFramesPerSecond();
    
        //m_text = (fps > 0) ? std::to_wstring(fps) + L" FPS" : L" - FPS";
    

超初心者のプログラム入門(DirectX Store)