3

我试图在 Windows 上使用windows.h.

在对 msdn 进行一些研究后,我想出了这个:

`

//Free current console
if ( FreeConsole() == 0 ) return GetLastError();
//Get clean console
if ( AllocConsole() == 0 ) return GetLastError();

HANDLE buffer1 = GetStdHandle( STD_OUTPUT_HANDLE );
HANDLE buffer2 = CreateConsoleScreenBuffer( GENERIC_WRITE,
                                            0,
                                            NULL,
                                            CONSOLE_TEXTMODE_BUFFER,
                                            NULL );
COORD begin;
begin.X = 0;
begin.Y = 0;

SetConsoleCursorPosition(buffer1, begin);

DWORD writen;

WriteConsole( buffer1,
              L"Milk\n",
              5,
              &writen,
              NULL );

WriteConsole( buffer2,
              L"Melk\n",
              5,
              &writen,
              NULL );

system("PAUSE");

SetConsoleActiveScreenBuffer( buffer2 );

WriteConsole( buffer2,
              L"Malk\n",
              5,
              &writen,
              NULL );

WriteConsole( buffer1,
              L"Mulk\n",
              5,
              &writen,
              NULL );

system("PAUSE");

SetConsoleActiveScreenBuffer( buffer1 );

system("PAUSE");
CloseHandle( buffer2 );
return 0; //End of main

值得庆幸的是,这正在按预期工作。

首先屏幕输出只是:

Milk

然后是:

Melk
Malk

并完成:

Milk
Mulk

我对此有几个问题:

1)开头的FreeConsole()and真的有必要吗?AllocConsole()

2)我也应该使用CloseHandle()缓冲区1吗?或者我什至不应该将它用于buffer2?

3) 任何你认为重要的要指出的地方。

PS:这是我的第一个问题,我希望我没有违反任何准则。

PS²:我只是system("PAUSE")因为这是一个测试而使用它,你不应该担心我在实际软件中使用它。

4

1 回答 1

0

如果有人感兴趣,请找出答案:

1)我发现这根本没有区别。但是,如果您从 cmd 执行程序,将确保弹出另一个控制台。

2)CloseHandle()应该只用于控制台屏幕缓冲区。标准输出是自动处理的。

于 2013-01-21T01:17:11.433 回答