【发布时间】: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"),因为这是一个测试,您不必担心我在实际软件中使用它。
【问题讨论】: