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)