第61章 コンソールアプリで画面消去


今回は、コンソールアプリケーションでの画面の消去をします。 と、いってもスペースで塗りつぶすだけです。これだけでは おもしろくないので、ライブラリにしてみました。



まずは、ライブラリconlib.libを作るためのプログラムを書きます。 新規作成でプロジェクトの種類を「Win32 Static Library」にします。そして プログラムを書いてビルドします。

// conlib.c #include <windows.h> //画面をスペースで埋める int my_cls() { COORD coset; HANDLE hOut; DWORD dwWritten; WORD wAttribute; CONSOLE_SCREEN_BUFFER_INFO cinf; hOut = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hOut, &cinf); coset.X = 0; coset.Y = 0; wAttribute = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; if (FillConsoleOutputCharacter(hOut, ' ', cinf.dwSize.X * cinf.dwSize.Y, coset, &dwWritten) ==0) return -1; SetConsoleTextAttribute(hOut, wAttribute); if (FillConsoleOutputAttribute(hOut, wAttribute, cinf.dwSize.X * cinf.dwSize.Y, coset, &dwWritten) == 0) return -2; return 0; } BOOL my_setcolor(WORD wColor) { HANDLE hOut; hOut = GetStdHandle(STD_OUTPUT_HANDLE); return SetConsoleTextAttribute(hOut, wColor); } BOOL my_locate(SHORT x, SHORT y) { HANDLE hOut; COORD co; co.X = x; co.Y = y; hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut, co); return TRUE; }

たったこれだけです。my_cls関数は画面をスペースで埋めつくします。 my_setcolor関数はテキストの色を設定します。my_locate関数はカーソル位置を 指定します。

GetConsoleScreenBufferInfo関数でスクリーンの幅、高さを取得します。 この関数については第58章で解説してあります。

BOOL FillConsoleOutputCharacter( HANDLE hConsoleOutput, TCHAR cCharacter, DWORD nLength, COORD dwWriteCoord, LPDWORD lpNumberOfCharsWritten );

これは、指定した座標から指定した文字数だけ書き込む関数です。

hConsoleOutputは、スクリーンバッファのハンドルを指定します。

cCharacterには、書き込む文字を指定します。

nLengthには、書き込む文字数を指定します。

dwWriteCoordには、書き込みの先頭座標を指定します。

lpNumberOfCharsWrittenには、実際に書き込まれた文字数を格納する 変数のポインタを指定します。

成功すると0以外が返され、失敗すると0が返ります。

この関数を使って画面全体にスペースを書き込めば画面消去となりますが、 実際には色(文字色、背景色)も変更されている可能性があるので、これを 文字色は白、背景色は黒にしておきます。

BOOL FillConsoleOutputAttribute( HANDLE hConsoleOutput, WORD wAttribute, DWORD nLength, COORD dwWriteCoord, LPDWORD lpNumberOfAttrsWritten );

指定した座標から指定した文字数だけテキストの色と背景色を変更します。

hConsoleOutputには、スクリーンバッファのハンドルを指定します。

wAttributeには、色を指定します。指定の方法は第58章を参照してください。

nLengthには、文字数を指定します。

dwWriteCoordには、先頭の座標を指定します。

lpNumberOfAttrsWrittenには、実際に色が設定された文字数を格納する変数へのポインタを指定します。

my_setcolor関数とmy_locate関数については、説明は不要でしょう。

さて、ライブラリ(conlib.lib)ができたら、ヘッダーファイルも作っておくと便利です。

// conlib.h int my_cls(); BOOL my_setcolor(WORD); BOOL my_locate(SHORT, SHORT);

このライブラリを使うプログラムに、このヘッダファイルをincludeしておきます。

では、実際に使ってみましょう。

プロジェクトに、conlib.libを参加させておきます。

// conlibex.c #include <windows.h> #include <stdio.h> #include <conio.h> #include "conlibex.h" int main() { int i; my_setcolor(FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_GREEN); for (i = 0; i < 100; i++) printf("%02d, ", i); my_setcolor(FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_INTENSITY); printf("何かキーを押すと画面を消去します\n"); getch(); if (my_cls() != 0) printf("Error\n"); my_locate(0, 20); printf("終了します\n"); return 0; }

conlibex.hがインクルードされていることに注意してください。

画面消去とテキストの色指定、カーソル位置指定が簡単にできます。

テキスト色、背景色を変えて0から99までを画面表示しています。

何かキーを押すと・・・



画面がきれいになりました。



[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Jan/02/2001 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。