を使用して、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()
andAllocConsole()
は本当に必要ですか?
2) CloseHandle()
buffer1 にも使用する必要がありますか? または、buffer2に使用するべきではありませんか?
3) その他、指摘することが重要だと思われること。
PS: これは私の最初の質問です。ガイドラインに違反していないことを願っています。
PS²:system("PAUSE")
これはテストのためだけに使用したものであり、実際のソフトウェアで使用することについて心配する必要はありません。