EN JA
curs_window(3X)
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 のどちらかが 0 であるなら、デフォルトで LINES - begin_ yCOLS - begin_ x になります。新しい全画面ウィンドウは、 newwin(0,0,0,0) を呼び出すことによって作成されます。

delwin の呼び出しは、指定されたウィンドウを削除し、それに関連したすべてのメモリを解放します (実際には、ウィンドウの画面イメージを削除しません)。メインウィンドウを削除する前に、サブウィンドウを削除しなければなりません。

mvwin の呼び出しは、左上角が位置 ( x, y) にあるようにウィンドウを移動します。移動によってウィンドウが画面からはみ出てしまうなら、エラーとなりウィンドウは、移動されません。サブウィンドウを移動することもできますが、これは、避けるべきです。

subwin の呼び出しは、与えられた数の行 nlines と列 ncols である新しいウィンドウを作成し、それへのポインタを返します。ウィンドウは、画面上の位置 ( begin_ y, begin_ x) となります。 (この位置は、画面に相対的であって、ウィンドウの orig に相対的にではありません。) ウィンドウは、ウィンドウ orig の中央に作成されるので、 1 つのウィンドウに行われた変更は、両方のウィンドウに影響します。サブウィンドウは、ウィンドウ orig とメモリを共有します。このルーチンを使用するとき、サブウィンドウで wrefresh を呼び出す前に、 origtouchwin または touchline を呼び出す必要があります。

derwin の呼び出しは、 begin_ ybegin_ x が、画面ではなくウィンドウ orig の原点に相対的であることを除いて、 subwin の呼び出しと同じです。サブウィンドウと派生したウィンドウの間の差はありません。

mvderwin の呼び出しは、親ウィンドウの内部の派生したウィンドウ (またはサブウィンドウ) を移動させます。ウィンドウの画面に相対的なパラメータは、変更されません。このルーチンは、画面上の同じ物理的な位置に親ウィンドウのさまざまな部分を表示するために使用されます。

dupwin の呼び出しは、ウィンドウ win の正確な複製を作成します。

wsyncup の呼び出しは、 win で変更された win の先祖のすべての位置をタッチ (変更されたものと) します。 syncok が 2 番めの引数に TRUE を付けて呼び出されたなら、 wsyncup は、ウィンドウ内に変更があるときはいつでも自動的に呼び出されます。

wsyncdown ルーチンは、その先祖ウィンドウのいずれかのタッチされた win の各位置をタッチ (変更されたものと) します。このルーチンは、 wrefresh によって呼び出されるので、手動で呼び出すことは、ほとんど必要ありません。

ルーチン wcursyncup は、ウィンドウの現在のカーソル位置を反映するウィンドウのすべての先祖の現在のカーソル位置を更新します。

戻り値

整数を返すルーチンは、失敗すると整数 ERR を返し、成功して終了すれば、 OK (SVr4 は、" ERR 以外の整数値"とだけ明記されています) を返します。

ポインタを返すルーチンは、エラーの場合に NULL を返します。

X/Open は、エラー条件を何も定義していません。この実装では、

delwin
は、ウィンドウのポインタが NULL である、またはウィンドウが別のウィンドウの親であるなら、エラーを返します。
また、この実装は、ウィンドウのリストを保持して、 delwin に渡されたポインタが、それが作成したものであるかをチェックし、そうでなければ、エラーを返します。
mvderwin
は、ウィンドウのポインタが NULL であるか、またはウィンドウのいくつかの部分が画面の外に置かれるなら、エラーを返します。
mvwin
は、ウィンドウのポインタが NULL であるか、またはウィンドウが実際の詰め物であるか、またはウィンドウのいくつかの部分が画面の外に置かれるなら、エラーを返します。
syncok
は、ウィンドウのポインタが NULL であるなら、エラーを返します。

多くの小さな変更がウィンドウで行われるなら、 wsyncup オプションは、実行効率を下げることもあります。

syncok は、マクロであるかもしれないことに注意してください。

バグ

サブウィンドウ関数 ( subwin, derwin, mvderwin, wsyncup, wsyncdown, wcursyncup, syncok) は、変わっており、不完全に実装され、よくテストされていません。

System V の curses 文書は、 wsyncupwsyncdown が実際に行うことについて、非常に不明瞭です。それは、祖先の変更によって影響される行に正確にタッチ (変更されたものと) することのみを想定することを意味するように思われます。ここで、言語と curses 実装の振る舞いは、XPG4 curses 標準を模倣して作られています。より弱い XPG4 の仕様は、より遅い更新の結果となるかもしれません。

移植性

XSI Curses standard, Issue 4 は、これらの関数を記述しています。

関連項目

curses(3X), curs_refresh(3X), curs_touch(3X)