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);
}
問題は、次の後にのみ入力をフェッチする必要があることです。
- 前の std::cout が実行され、
- ユーザーが入力を入力して ENTER を押す ( wxEVT_TEXT_ENTERイベント ハンドラによって通知される)
私ができると思う唯一の方法は、多くの条件とブールフラグを追加して、ユーザー入力を監視し、プレスを開始することです。これを機能させるための簡単な戦略はありますか? 私の目標は、このアプリを公開することではありませんが、必要に応じて wxWidgets 要素を機能させる方法を学ぶことです。このように、コードの途中に非常に多くの std::cin があります。この問題により、私は wxWidgets を進めることができなくなりました。そして、ダイアログを追加せずに、すべてを 1 つのフレームに収めたいと思います。
