今、コンソール上で動作するRPGを作っているのですが、
それの中で、もちろんコンソール(背景が黒くて文字だけのやつ)上
なので、文字しか表現方法がなくて、どんどん文字が溜まってくわけです。
これだと、かなり表示が見づらく、危うく重要な情報まで
落としてしまいそうな感じがします。
そこで、すぐに実装できるコンソール文字列の
文字色の変更だけはちゃっちゃと実装しました。
これは、Win32APIの一部なので、C#から呼び出す場合には、
DllImportして、後は、そのクラスにWriteメソッドを
作って、そこの引数に文字色の指定をできるようにしました。
で、一番の問題のコンソール文字列の削除。
これは、かなり(と言っても、1時間ほどだが)面倒でした。
まず、MSDNとかGoogle使って消去用のAPIがないか探してみる、、、
しかし、見当たらず。結構需要はありそうだと思うんだけどなぁ。
そのうち、MSDN眺めていたら、コンソールの開放と、
作成を行う関数があるのを発見。
さらに、コンソールの座標を取得して、
設定する関数らしきものを発見。
早速実装してみる・・・が、動かず。
いまいちよくわからないが、おそらく、
座標を設定、取得する関数が、自分の目的としていた関数とは
少し違っていたようだ。
もうこうなったら、、、ということで、強硬手段発動。
まず、コンソールのタイトルを適当なものに変えて、
FindWindowでコンソールウィンドウのハンドルを取得。
そのハンドルから、破棄前の座標を取得。
コンソールを破棄。ちょっとWaitを入れる(これが肝)
さっきと同様にして、ウィンドウハンドルを取得。
さっきの座標を使って、座標を設定。
これで、若干ちらつきはあるものの、
文字列を削除することができました。
ほんと、強引なやり方だなぁ、、、