若干無理やりな実装をしてみる(コンソール上の文字列の消去)

今、コンソール上で動作するRPGを作っているのですが、
それの中で、もちろんコンソール(背景が黒くて文字だけのやつ)上
なので、文字しか表現方法がなくて、どんどん文字が溜まってくわけです。
これだと、かなり表示が見づらく、危うく重要な情報まで
落としてしまいそうな感じがします。

そこで、すぐに実装できるコンソール文字列の
文字色の変更だけはちゃっちゃと実装しました。
これは、Win32APIの一部なので、C#から呼び出す場合には、
DllImportして、後は、そのクラスにWriteメソッドを
作って、そこの引数に文字色の指定をできるようにしました。

で、一番の問題のコンソール文字列の削除。
これは、かなり(と言っても、1時間ほどだが)面倒でした。
まず、MSDNとかGoogle使って消去用のAPIがないか探してみる、、、
しかし、見当たらず。結構需要はありそうだと思うんだけどなぁ。

そのうち、MSDN眺めていたら、コンソールの開放と、
作成を行う関数があるのを発見。
さらに、コンソールの座標を取得して、
設定する関数らしきものを発見。

早速実装してみる・・・が、動かず。

いまいちよくわからないが、おそらく、
座標を設定、取得する関数が、自分の目的としていた関数とは
少し違っていたようだ。

もうこうなったら、、、ということで、強硬手段発動。

まず、コンソールのタイトルを適当なものに変えて、
FindWindowでコンソールウィンドウのハンドルを取得。
そのハンドルから、破棄前の座標を取得。
コンソールを破棄。ちょっとWaitを入れる(これが肝)
さっきと同様にして、ウィンドウハンドルを取得。
さっきの座標を使って、座標を設定。
これで、若干ちらつきはあるものの、
文字列を削除することができました。

ほんと、強引なやり方だなぁ、、、

Posted at : 2005-09-27 23:27:59 / Category : none

Comments

まだコメントはありません / No comment.

Send comment


Name


Mail-address (empty is OK. If you want to notify update, please fill mail-address.)


Bot check code (241231 と入力してください / Please input 241231.)