当我将输出从WinMain重定向到控制台时,为什么我必须按Enter键?

时间:2014-02-13 19:19:08

标签: c++ windows winapi

我制作了一个简单的控制台应用程序,但我想隐藏控制台窗口。因此我删除了

int _tmain( int argc, _TCHAR* argv[ ] )

并添加了这两行:

#pragma comment( linker, "/SUBSYSTEM:WINDOWS" )
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )

一切正常,但我希望有/?参数显示用法。但是没有控制台窗口,我需要以某种方式显示它。所以我用Google搜索了一下,我发现了这段代码:

void SetStdOutToNewConsole()
{
int hConHandle;
long lStdHandle;
FILE *fp;

// allocate a console for this app
if ( !AttachConsole( ATTACH_PARENT_PROCESS ) )
{
    if ( !AllocConsole( ) )
    {
         MessageBoxA( NULL, "AllocConsole failed!", NULL, NULL );
    }   
}

// redirect unbuffered STDOUT to the console
lStdHandle = ( long )GetStdHandle( STD_OUTPUT_HANDLE );
hConHandle = _open_osfhandle( lStdHandle, _O_TEXT );
fp = _fdopen( hConHandle, "w" );
*stdout = *fp;

setvbuf( stdout, NULL, _IONBF, 0 );

}//SetStdOutToNewConsole

如果/?被定义,我会调用此函数,我可以显示我想要的内容。但是,如果我打开一个cmd窗口,然后从那里开始myapp.exe /?,文本将显示我想要的内容,但我必须点击额外的Enter。这是为什么?有没有办法以某种方式解决这个问题,所以我不需要输入一个?

提前致谢!

0 个答案:

没有答案