私が欲しいもの:
GUIウィンドウとコンソールウィンドウがあるアプリケーション。ウィンドウをクリックしたり、ドラッグしたりできます。任意の時点で、コンソールを選択して行を入力すると、処理されます。
私がすでに持っているもの:
コンソールを割り当ててそれ自体に接続するアプリケーションは、標準ストリームをそれにリダイレクトします。コードは次のとおりです。
AllocConsole() ;
AttachConsole( GetCurrentProcessId());
freopen("CONIN$","rb",stdin); // reopen stdin handle as console window input
freopen("CONOUT$","wb",stdout); // reopen stout handle as console window output
freopen("CONOUT$","wb",stderr); // reopen stderr handle as console window output
次に、ウィンドウ クラスを登録し、ウィンドウを作成して表示します。コンソールへの出力は正常に機能し、ウィンドウとの相互作用は正しいです。
ただし、コンソールに何も入力できません。私はそれについて推測することができます: std::cin >> my_string のようなものを呼び出すと、行を入力できますが、ウィンドウとの対話は入力が完了するまで停止します。あれは正しいですか?上記の方法でアプリケーションを動作させるにはどうすればよいですか?
アップデート:
関連する質問を見つけました: stdin に C++ の入力があるかどうかをテストします (windows および/または linux)
コンソール入力に文字があるかどうかを判断するためのコードは、次のように指定されています。
bool StdinOpen() {
static HANDLE handle = GetStdHandle(STD_INPUT_HANDLE);
DWORD bytes_left;
PeekNamedPipe(handle, NULL, 0, NULL, &bytes_left, NULL);
return bytes_left;
}
ただし、コンソールに常に入力があるかのように、法外な数値が返されます。