1

wxWidgets を使用して、C++ コンソール アプリを GUI に書き起こしました。私の関数のほとんどは、コマンドライン フロー用に作成されました。GUI と関数をインターフェースするためのハンドルと追加のコードを作成しています。出力ストリーム用のコンソールをエミュレートしましたが、これはうまく機能します (wxStreamToTextRedirector を使用)。ただし、テキスト コントロールからユーザー入力を取得し、以下のコードのような場合に std::cin コマンドを置き換える簡単な解決策を見つけることができません。フレームのイベント ハンドラーと GUI コントロールは MainFrame.cpp にあり、オブジェクト データと関数は別の Data.cpp にあります。

MainFrame.cpp からのボタン プレス イベントで呼び出される Data.cpp に関数があります。

bool Data::run_yn_prompt()
{   //Run Y or N input prompt
    do {
            std::string input = "";
            std::cout << "\n Input Y/y to proceed, N/n to cancel:"; **//OUTPUT TO DISPLAY CONSOLE**
            std::getline(std::cin, input);          **//Need to fetch wxTextCtrl input at this point only**
            std::cout << input;
            if ( (input=="Y") || (input=="y") ) return true;
            if ( (input=="N") || (input=="n") ) return false;
        } while(1==1);
}

問題は、次の後にのみ入力をフェッチする必要があることです。

  1. 前の std::cout が実行され、
  2. ユーザーが入力を入力して ENTER を押す ( wxEVT_TEXT_ENTERイベント ハンドラによって通知される)

私ができると思う唯一の方法は、多くの条件とブールフラグを追加して、ユーザー入力を監視し、プレスを開始することです。これを機能させるための簡単な戦略はありますか? 私の目標は、このアプリを公開することではありませんが、必要に応じて wxWidgets 要素を機能させる方法を学ぶことです。このように、コードの途中に非常に多くの std::cin があります。この問題により、私は wxWidgets を進めることができなくなりました。そして、ダイアログを追加せずに、すべてを 1 つのフレームに収めたいと思います。

ここに画像の説明を入力

4

1 に答える 1