【问题标题】:Am I forgetting something? (Double Console Buffer for Windows)我是不是忘记了什么? (Windows 的双控制台缓冲区)
【发布时间】:2013-01-19 23:33:34
【问题描述】:

我正在尝试使用windows.h 在 Windows 上为控制台制作/测试双缓冲区。

在对 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()AllocConsole() 真的有必要吗?

2) 我也应该将CloseHandle() 用于buffer1 吗?或者我什至不应该将它用于 buffer2?

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

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

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

【问题讨论】:

    标签: c++ winapi console


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 2017-03-09
      • 2012-06-21
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多