cursesライブラリによる画面制御

このページの最終変更日:2000年 1月26日
curses(カージィス)ライブラリは、画面制御を行なう約170個の関数からなっています。 cursesライブラリを使用することにより、端末に依存しないコードを記述でき移植性が高くなります。また、ウィンドウと呼ばれる端末独立のデータ構造を通して、各種制御ができます。コンパイルする場合は、-lcurses をオプションとして指定する必要があります。(NEXTSTEPでは、-ltermcap も指定する必要があります)

基本

  1. 使用するにあたって、initsrc() によってライブラリを初期化します
  2. newwin(line,column,begin_y,begin_x) によってウィンドウを作成します
  3. wmove(win,y,x) によって、座標(x,y)にカーソルを移動させます
  4. waddstr(win,msg) によって、msgを書き込みます
  5. wrefresh(win) によって、ウィンドウに描画させます
  6. いろいろな処理を行なう
  7. endwin() によって、initsrcで確保したメモリを開放します
waddstr()等で書き込みを行なっても、実際には画面なにも変化しません。画面描画はwrefresh()のタイミングで行なわれます。

initsrc()によって、stdscrというスクリーンが確保されます。これは、端末のサイズと一致するウィンドウです。 また、グローバル変数LINESとCOLSに、端末の大きさがセットされます。 move()などウィンドウの指定のないものは、スクリーンに対して操作されます。 move()など座標の指定がx,y逆ですが、row(行),column(列)の並びだと思えばいいと思います。

主な関数

関数名意味
WINDOW *initsrc(void)ライブラリの初期化(スクリーンの作成)
int endwin(void)ライブラリの使用後の後処理
WINDOW *newwin(int line,int cols,int begin_y,init begin_x)ウィンドウの作成
WINDOW *subwin(WINDOW *win,int line,int cols,int begin_y,int begin_x)サブウィンドウの作成
WINDOW *delwin(WINDOW *win)ウィンドウの削除
int box(WINDOW *win,char vc,char hc)ウィンドウの周囲を文字で囲む
int refresh(void)スクリーンの描画
int wrefresh(WINDOW *win)ウィンドウの描画
int clear(void)クリアする
int wclear(WINDOW *win)
int move(int y,int x)カーソルを(x,y)に移動
int wmove(WINDOW *win,int y,int x)
int addch(char ch)文字を書き込む
int waddch(WINDOW *win,char ch)
int addstr(char *str)文字列を書き込む
int waddstr(WINDOW *win,char *str)
int mvaddch(int y,int x,char ch)カーソルを(x,y)に移動し、文字を書き込む
int mvwaddch(WINDOW *win,int y,int x,char ch)
int mvaddstr(int y,int x,char *str)カーソルを(x,y)に移動し、文字列を書き込む
int mvwaddstr(WINDOW *win,int y,int x,char *str)
int addch()カーソルの位置の文字を消す
int waddch(WINDOW *win)
int clrtoeol()カーソルの位置から行末まで消す
int wclrtoeol(WINDOW *win)
int printw(char *fmt,...)書式付で文字列を挿入
int wprintw(WINDOW *win,char *fmt,...)
int getch(void)文字が1文字入力されるのを待ちその文字を返す
int wgetch(WINDOW *win)
int getstr(char *str)文字列を入力する
int getstr(WINDOW *win,char *str)
int scanw(char *fmt,...)書式付で文字列を入力する
int wscanw(WINDOW *win char *fmt,...)
int inch(void)カーソル位置の文字を返す
int winch(WINDOW *win)
int getyx(WINDOW *win,int y,int x)カーソルの位置を返す
int echo(void)入力 キーボードエコーのON/OFF
int noecho(void)
int cbreak(void)バッファリングのON/OFF
int nocbreak(void)
インクルードファイル(Linux: /usr/include/curses.h)を見ると色々な関数が用意されています。

サンプル

/* curses サンプルプログラム */



#include 


void	main()

{

	WINDOW *win;
	char c;


	/* 初期化 */

	initscr();



	/* エコー/バッファリング禁止 */

	noecho();

	cbreak();



	/* ウィンドウ作成 */

	win = newwin(LINES,COLS-1,0,0);

	box(win,'|','-');



	/* メッセージ描画 */

	mvwaddstr(win,1,3,"SAMPLE PROGRAM");
	mvwaddstr(win,3,3,"    CODE :");
	mvwaddstr(win,5,3,"   HITKEY:");
	mvwaddstr(win,7,3,"   END:ESC");
	wrefresh(win);
	while((c = wgetch(win)) != 0x1b){
		char buff[36];

		sprintf(buff,"%02X",c);

		mvwaddstr(win,3,14,buff);
		mvwaddch(win,5,14,c);
		wrefresh(win);
	}

  

	/* 後処理 */

	wclear(win);

	wrefresh(win);
	endwin();

}

ホームページに戻る 前のページに戻る
苦情・質問・感想は 小林正幸(kobamasadummy@mub.biglobe.ne.jp) まで
(メールアドレス中のdummyは削除してください。ウイルスメール対策です)