Multi window package on curses.


これは

ncursesを使ったC++の簡単なマルチウインドウ+入力フォームクラスです。
FreeBSD 4.4-RC上で開発&テストしてます。他の環境で動くかはわかりません。

なんで作ったの

作りたかったから、つくりました。
cursesの勉強してて、一応その成果のつもりで。

設計ポリシー

複雑にしない。使い方も仕組みも、簡単にカンタンに。
すべての制御は、ユーザプログラム側に託す。

スクリーンショット

fig1 サンプルプログラム実行画面。
テキストボックスと、セレクトボックスと、ボタンを使った入力フォーム例。

fig2 セレクトボックスを開いた様子

fig3 オーバーラップウインドウ

fig4 ウインドウを移動した。

fig5 応用例としてのメッセージボックス

でも、よく考えたらテキスト画面なんだから、グラフィックスでスクリーンショット撮らなくても、<PRE>で良かったんじゃないかとか、いまになって思ったり。

ダウンロード

ここから、ダウンロードできます。
http://www.youko-house.ne.jp./~hirohito/soft/rcktwl/rcktwl0.16.tgz

使い方

#include "rcktwl.h"
main()
{
RC_WINDOW win( 2, 3, 30, 14, "SAMPLE" );
win.mvprintstr( 1, 1, "Hello world." );
win.draw();
napms( 1000 );
}

ウインドウを作る
RC_WINDOW win( x, y, width, height, title );
win.draw();
通常のオブジェクトを宣言してやれば、ウインドウができる。
drawメソッドで、実際にスクリーンに描画する。

ウインドウに文字を書く
win.mvprintstr( x, y, string );
mvprintstrメソッドで、任意の位置に文字列を書くことができる。

ウインドウを消す
オブジェクトのスコープが終われば、デストラクタにより自動消去。

その他
サンプルプログラム を見てください。(アーカイブにも同梱)

動作がおかしいんだけど?

Q:ktermで画面にゴミがいっぱい残ります。
A:termcapデータベースの不備です。 FreeBSD QandA 1764 を適用すると直ります。漢字を使っている場合は、端末エミュレータやcursesが対応していないと文字が化けると思います。

Q:テンキーが使えない。
A:端末エミュレータ(kterm等)が、対応していないからです。X上で、テンキーは数字専用と割り切るなら、xmodmapで、 キーを割り当てなおす といいかも。

Q:ktermで、ファンクションキーに使えないものがある。
A:/etc/termcapの 記述ミス です。


謝意

cursesの勉強始めてわからないことがあった時、FreeBSD-users-jpで質問に答えていただいた方々に大感謝です。はい。