curs_refresh 3x

curs_refresh(3x)                                       curs_refresh(3x)




名前

       doupdate, redrawwin, refresh, wnoutrefresh, wredrawln,
       wrefresh - curses ウインドウと行の更新


書式

       #include <curses.h>

       int refresh(void);
       int wrefresh(WINDOW *win);
       int wnoutrefresh(WINDOW *win);
       int doupdate(void);
       int redrawwin(WINDOW *win);
       int wredrawln(WINDOW *win, int beg_line, int num_lines);


説明


refresh/wrefresh

        他のルーチンは単にデータ構造を操作するだけなので、
       実際に端末へ出力するには、 refreshwrefresh ルーチン 
       (または wnoutrefreshdoupdate ) を呼ばなければなりません。
        wrefresh ルーチンは最適化のため、そこにすでに何があるかを
       考慮しながら、指定されたウインドウを物理的な端末画面に
       コピーします。
        refresh ルーチンはデフォルト・ウインドウとして stdscr を
       使いますが同じです。
        leaveok を有効にしていない限り、端末の物理的なカーソルは
       そのウインドウのカーソル位置にそのまま置かれます。


wnoutrefresh/doupdate

        wnoutrefreshdoupdate ルーチンは、wrefresh だけよりも
       効率的に複数の更新をすることができます。
        curses はすべてのウインドウ構造体に加え、端末画面を表現する 
       2つのデータ構造を保持しています。実際の画面を表している
       物理画面と、プログラムが画面上に描こうとしている仮想画面です。

        wrefresh ルーチンは、まず、指定のウインドウを仮想画面に
       コピーする wnoutrefresh を呼び出し、次に、仮想画面と
       物理画面を比較し実際の更新を行う doupdate を呼び出すことで
       動作します。
        数個のウインドウを一度に出力しようとすれば、 wrefresh 
       呼び出しの連続は、 wnoutrefreshdoupdate をかわるがわる
       呼び出すことになり、何度か画面への出力の集中を引き起こします。
        先に各ウインドウに対して wnoutrefresh を呼び出しておくと、
       後で doupdate を 1回呼び出すだけでよいので、出力の集中は 
       1回だけになり、送られる文字数は少なくなり、CPU時間も
       短くなります。
        wrefresh の引数 win が広域(グローバル)変数 curscr だった
       場合は、ただちに画面をクリアし、はじめから描画し直します。

        上の「指定のウインドウを仮想画面にコピーする」という
       言い回しはあいまいです。実際には、ウインドウ内の
       タッチ(touch) (=変更) されたすべての行が仮想画面に
       コピーされます。
        これは、重なりあったウインドウを使うプログラムに影響します。
       もし 2つのウインドウが重なっていると、どちらの順序で
       更新することもでき、重なっている部分は明示的に変更された場合
       にのみ更新されることを意味します。
        (しかし、この挙動を利用する際の注意について、下記の
       移植性の節を参照してください。)


wredrawln/redrawwin

        wredrawln ルーチンは、画面の何行かが書き換えられており、
       何かが書き込まれる前にその内容を捨てなければならない、と 
       curses に指示します。
        curses は指示された行をタッチ (=変更されたとマーク) します。
        redrawwin() はウインドウ全体をタッチします。


戻り値

        整数を返すルーチンは、失敗した時には ERR を、正常終了した
       時には OK ( SVr4 では「 ERR 以外の整数値」とだけ指定) を
       返します。

        X/Open はエラーの条件を何も定義していません。
       この実装では次のようになっています。

          wnoutrefresh
                ウインドウ・ポインタがヌル、またはウインドウが
               実際にはパッドだった場合にエラーを返します。

          wredrawln
                呼び出した touchln がエラーを返した場合に
               エラーを返します。


注意

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


移植性

        これらの関数は XSI Curses standard, Issue 4 に記載されて
       います。

        wnoutrefresh() がウインドウの内容全体を仮想画面に
       コピーするのか、それとも変化のあった一部分のみなのかは、 
       curses の過去の ( SVr4 を含む) バージョンでは
       はっきり文書化されていませんでした。
        他の curses の実装にリンクしなければならないような
       プログラムの中で、上のどちらかの挙動に頼るのは
       賢明ではないかもしれません。
        代わりに、 wnoutrefresh() を呼び出す前に
       明示的に touchwin() を呼び出すことで、
       どんな場面でも内容全体をコピーすることを保証できます。
        

関連項目

       curses(3x), curs_outopts(3x) curs_variables(3x).



                                                       curs_refresh(3x)