Multi window package on curses.
これは
ncursesを使ったC++の簡単なマルチウインドウ+入力フォームクラスです。
FreeBSD 4.4-RC上で開発&テストしてます。他の環境で動くかはわかりません。
なんで作ったの
作りたかったから、つくりました。
cursesの勉強してて、一応その成果のつもりで。
設計ポリシー
複雑にしない。使い方も仕組みも、簡単にカンタンに。
すべての制御は、ユーザプログラム側に託す。
スクリーンショット
サンプルプログラム実行画面。
テキストボックスと、セレクトボックスと、ボタンを使った入力フォーム例。
セレクトボックスを開いた様子
オーバーラップウインドウ
ウインドウを移動した。
応用例としてのメッセージボックス
でも、よく考えたらテキスト画面なんだから、グラフィックスでスクリーンショット撮らなくても、<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で質問に答えていただいた方々に大感謝です。はい。