Did I forget something? (Double Console Buffer for Windows)
I tried to make / test a double buffer for the console on Windows using windows.h
.
After some research on msdn, I came up with the following:
`
//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
Fortunately, this works as intended.
At first, the screen output looks like this:
Milk
Then this:
Melk
Malk
And the conclusion:
Milk
Mulk
And I have a few questions about this:
1) Do you really need to use FreeConsole()
and AllocConsole()
?
2) Should I use CloseHandle()
buffer1 for too? Or should I not be using it for buffer2?
3) Anything that you consider important to indicate.
PS: This is my first question and I hope I am not breaking any of the guidelines.
PS²: I only used it system("PAUSE")
because it was a test and you shouldn't worry about me using it in real software.
source to share