こんにちは
最近Win32_APIをつかってコンソールゲームを作っています。(文字のみで画面が構成される)
今回はダブルバッファを用いようと思ったため標準入出力は使わず、
代わりに
- コンソール出力バッファ1
- コンソール出力バッファ2
- コンソール入力バッファ
を作ろうと思いました。
ダブルバッファを使った文字出力、入力バッファに文字入力はできたのですが、
入力バッファに残ったごみを削除することができません。
(15文字入力、ReadConsole関数で10文字読み込む、次のReadConsole関数に5文字読み込まれてしまう)
調べてみたところ、
残っているごみの数を調べるにはGetNumberOfConsoleInputEvents、
ごみを消すにはFlushConsoleInputBuffer
という関数を使うらしいのですが、これらがうまく動いてくれません。
入力バッファを引数に渡しても「ゴミは残ってない」、「だから消さない」と言ってくるのです。
今回の質問なのですがGetNumberOfConsoleInputEvents、FlushConsoleInputBufferに渡すのは入力バッファのハンドルであっているでしょうか?
というかそもそも違う関数を使うのでしょうか?
よろしくお願いします<(__)>
以下簡略コード
コード:
auto input_handle =CreateFile
(
TEXT("CONIN$"), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL
);
char str[10];
DWORD temp;
//15文字入力すると先頭10文字がstrに格納される
ReadConsole(input_handle, str, 10, &temp, NULL);
//残っているごみの数をtempに格納->0が入る
GetNumberOfConsoleInputEvents(input_handle, &temp);
//残り5文字をバッファから消したい
FlushConsoleInputBuffer(input_handle);
//でも消えずに残り5文字がstrに格納されてしまう
ReadConsole(input_handle, str, 10, &temp, NULL);