我想要的是:
一个应用程序,其中有一个 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 之类的东西,我将能够输入一行 - 但与窗口的交互将停止,直到输入完成。那是对的吗?我怎样才能使应用程序以我上面描述的方式运行?
更新:
我发现了相关问题:测试标准输入是否有 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;
}
但是,它会返回一些过高的数字,就好像控制台中总是有输入一样。