curs_window(3x) curs_window(3x)
newwin, delwin, mvwin, subwin, derwin, mvderwin, dupwin,
wsyncup, syncok, wcursyncup, wsyncdown
- curses ウインドウの作成と移動
#include <curses.h>
WINDOW *newwin(
int nlines, int ncols,
int begin_y, int begin_x);
int delwin(WINDOW *win);
int mvwin(WINDOW *win, int y, int x);
WINDOW *subwin(WINDOW *orig,
int nlines, int ncols,
int begin_y, int begin_x);
WINDOW *derwin(WINDOW *orig,
int nlines, int ncols,
int begin_y, int begin_x);
int mvderwin(WINDOW *win, int par_y, int par_x);
WINDOW *dupwin(WINDOW *win);
void wsyncup(WINDOW *win);
int syncok(WINDOW *win, bool bf);
void wcursyncup(WINDOW *win);
void wsyncdown(WINDOW *win);
newwin を呼び出すと、指定された行数と桁数を持つ新しい
ウインドウを作り、ポインタを返します。
ウインドウの左上隅は
行 begin_y,
桁 begin_x です。
nlines または ncols がゼロのときは、デフォルトで
LINES - begin_y と
COLS - begin_x
になります。
newwin(0,0,0,0) を呼び出すと新しい全画面ウインドウを
作成します。
delwin を呼び出すと、指定されたウインドウを削除し、
それに伴うすべてのメモリを解放します。(これは画面上の
ウインドウ表示を実際には消去しません。)
先に子ウインドウを削除しないと親ウインドウを削除できません。
mvwin を呼び出すと、左上隅が (x, y) の位置になるように
ウインドウを移動します。
移動によりウインドウが画面の外に出る場合、これはエラーとなり
ウインドウは移動されません。
子ウインドウの移動は可能ですが、避けるべきです。
subwin を呼び出すと、与えられた行数 nlines と桁数 ncols を
持つ新しい子ウインドウを作り、ポインタを返します。
子ウインドウは画面上の (begin_y, begin_x) の位置になります。
子ウインドウはウインドウ orig とメモリを共有しますので、
一方のウインドウへの変更は両方のウインドウに影響します。
このルーチンを使う場合、子ウインドウへの wrefresh を
呼び出す前に、 orig に対して touchwin または touchline を
呼び出す必要があります。
derwin を呼び出すことは、 subwin を呼び出すことと同じですが、
begin_y と begin_x が画面ではなくウインドウ orig の原点に
相対的な位置だということだけが異なっています。
( subwin で作成した) 子ウインドウと ( derwin で作成した)
派生ウインドウの間には何も違いはありません。
mvderwin を呼び出すと、派生ウインドウ (または子ウインドウ)
を親ウインドウの中で移動します。
ウインドウの特性値で画面に相対的なものは変化しません。
このルーチンは親ウインドウ内の異なる部分を画面上の
同じ物理位置に表示するために使います。
dupwin を呼び出すと、ウインドウ win の完全な複製を作ります。
wsyncup を呼び出すと、ウインドウ win の中で変化した
win の祖先ウインドウの中のすべての場所をタッチ
(変更されたとマーク) します。
syncok を第 2 引数 TRUE とともに呼び出すと、ウインドウ内に
変化があったときはいつでも自動的に wsyncup が呼び出されます。
wsyncdown ルーチンは、 win の祖先ウインドウのどれかの中で
タッチされた win 内のすべての場所をタッチします。
このルーチンは wrefresh から呼び出されるので、手動で実行する
必要はほとんどないでしょう。
wcursyncup ルーチンは、すべての祖先ウインドウの
現在カーソル位置を更新して、指定のウインドウの
現在カーソル位置を反映させます。
整数を返すルーチンは、失敗した場合に整数 ERR を、
正常終了の場合に OK ( SVr4 は「 ERR 以外の整数値」としか
指定していません) を返します。
ポインタを返すルーチンは、エラーの場合に NULL を返します。
X/Open はエラーの条件を定義していません。この実装では
delwin
ウインドウ・ポインタがヌルのとき、またはウインドウが
他のウインドウの親であるときにエラーを返します。
derwin
親ウインドウ・ポインタがヌルのとき、
または座標 (訳注: 原文は縦座標) か寸法のいずれかが
負のとき、または作成されるウインドウが親ウインドウの中に
収まらないときにエラーを返します。
dupwin
ウインドウ・ポインタがヌルのときにエラーを返します。
(訳注: delwin つづき)
この実装はまた、ウインドウのリストを保持しており、
delwin に渡されたポインタが作成されたものかどうかを調べ、
そうでなかった場合にはエラーを返します。
mvderwin
ウインドウ・ポインタがヌルのとき、またはウインドウの
一部分が画面からはみ出すことになるときにエラーを返します。
mvwin
ウインドウ・ポインタがヌルのとき、またはウインドウが
実際にはパッドのとき、またはウインドウの一部分が
画面からはみ出すことになるときにエラーを返します。
newwin
開始座標 (訳注: 原文は開始縦座標) が負のとき、
または行数もしくは桁数が負のときに失敗します。
syncok
ウインドウ・ポインタがヌルのときにエラーを返します。
subwin
親ウインドウ・ポインタがヌルのとき、
または座標 (訳注: 原文は縦座標) か寸法のいずれかが
負のとき、または作成されるウインドウが親ウインドウの中に
収まらないときにエラーを返します。
ウインドウ・ポインタを返す関数は、そのデータ構造のために
十分なメモリがない場合にも失敗します。
これらのどの関数も、 ( initscr か newterm によって)
画面が初期化されていないときには失敗します。
ウインドウに小さな変更をたくさん行う場合、
wsyncup オプションは性能を低下させるかもしれません。
syncok はマクロであるかもしれないことに注意してください。
子ウインドウ関数群 (subwin, derwin, mvderwin, wsyncup,
wsyncdown, wcursyncup, syncok) は脆くて不完全な実装であり、
十分にテストされていません。
System V curses の説明文書は wsyncup と wsyncdown が
実際に行うことについて非常に不透明です。
祖先ウインドウが影響を与えたそれらの行のみを厳密に
タッチすることになっていると暗示しているかのようです。
ここの言葉づかいと curses の実装の挙動とが、
XPG4 curses standard の原型になっています。
XPG4 の非力な仕様は更新速度の低下をもたらすかもしれません。
これらの関数は XSI Curses standard, Issue 4 に
記載されています。
curses(3x), curs_refresh(3x), curs_touch(3x),
curs_variables(3x)
curs_window(3x)