1

我有一个用 C++(使用 MFC)编写的 GUI Windows 应用程序,它将自身附加到父控制台以通过stdout流输出。它使用AttachConsole API 和此处描述RedirectIOToConsole的方法。

因此,如果我从常规控制台应用程序(本机具有输出到标准输出)中调用以下行:

_tprintf(_T("Test message.\n"));

我得到了我期望的输出:

在此处输入图像描述

但是,如果我从我的 GUI 应用程序(带有附加的父控制台)调用同一行代码,我会得到以下信息,除了控件似乎没有返回到父命​​令提示符窗口(见红色圆圈):

在此处输入图像描述

请注意,我可以在父命令提示符窗口中键入,所以它不会挂起,如果我按 Enter 键,它将执行我作为命令键入的任何内容。

那么我没有从我的控制台应用程序调用什么来将控制权返回给父控制台?

4

1 回答 1

1

这不是关于返回控制权。

当您从命令提示符运行控制台应用程序时,命令提示符会等到控制台应用程序完成,因此您会看到控制台应用程序的输出,然后是一个新的提示符,如您的第一张图片所示。

当您从命令提示符运行 GUI 应用程序时,命令提示符不会等待 GUI 应用程序完成,因此您通常会看到一个新的提示符,然后是 GUI 应用程序的输出,如下所示:

C:\>TestGuiProjWithOutputToConsole
C:\>Test Message.
_

正如您所指出的,没有任何问题。您可以键入命令并且它们起作用,只是提示出现在错误的位置。

您的第二个示例没有显示第二个提示,可能是因为您有一个回车符,所以提示被覆盖。尝试在测试消息之前输出一个换行符,您应该会看到提示(尽管仍然在错误的位置)。

您可以通过运行以下命令告诉控制台等待 GUI 应用程序:

start /wait TestGuiProjWithOutputToConsole

简而言之,GUI 应用程序不能很好地使用命令提示符,因为它们都在同时运行,输出到同一个控制台,所以它们的输出是混乱的。

于 2013-02-27T11:40:10.080 回答