Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 101

Автор ΠœΡΡ‚ΡŒΡŽ НСйл

<b>#include &lt;curses.h&gt;</b>

<b>int mvwin(WINDOW *window_to move, int new_y, int new x);</b>

<b>int wrefresh(WINDOW *window_ptr);</b>

<b>int wclear(WINDOW *window_ptr);</b>

<b>int werase(WINDOW *window_ptr);</b>

<b>int touchwin(WINDOW *window_ptr);</b>

<b>int scrollok(WINDOW *window_ptr, bool scroll_flag);</b>

<b>int scroll(WINDOW *window_ptr);</b>

Ѐункция

mvwin
ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ ΠΏΠΎ экрану. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠΊΠ½ΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π² области экрана, функция
mvwin
Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ, Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΊΠ½ΠΎ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ какая-Ρ‚ΠΎ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ экрана.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

wrefresh
,
wclear
ΠΈ
werase
β€” просто обобщСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ Ρ€Π°Π½Π΅Π΅; ΠΎΠ½ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ
WINDOW
, поэтому ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π° Π½Π΅ Π½Π° ΠΎΠΊΠ½ΠΎ stdscr.

Ѐункция

touchwin
довольно ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ. Она ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ curses ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ содСрТимоС ΠΎΠΊΠ½Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ curses всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
wrefresh
, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ мСняли содСрТимоС этого ΠΎΠΊΠ½Π°. Π­Ρ‚Π° функция ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° для опрСдСлСния ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΠΊΠΎΠ½, Π·Π°Π³Ρ€ΠΎΠΌΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… экран.

Π”Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

scroll
ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΎΠΉ ΠΎΠΊΠ½Π°. Ѐункция
scrollok
ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ логичСского значСния true (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ) Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΡƒ ΠΎΠΊΠ½Π°. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠΊΠ½Π° Π½Π΅ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Ѐункция
scroll
просто ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ Π½Π° ΠΎΠ΄Π½Ρƒ строку Π²Π²Π΅Ρ€Ρ…. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ curses Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈ функция
wsctl
, которая Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ количСство строк для ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом. ΠœΡ‹ вСрнСмся ΠΊ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π² этой Π³Π»Π°Π²Π΅.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.4.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.4. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ мноТСствСнными ΠΎΠΊΠ½Π°ΠΌΠΈ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, зная, ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ нСсколькими ΠΎΠΊΠ½Π°ΠΌΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ эти Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ multiw1.c. Для краткости ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ошибок Π½Π΅ приводится.

1. Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ отсортированныС объявлСния:

#include &lt;unistd.h&gt;

#include &lt;stdlib.h&gt;

#include &lt;curses.h&gt;

int main() {

Β WINDOW *new_window_ptr;

Β WINDOW *popup_windov_ptr;

Β int x loop;

Β int y_loop;

Β char a_letter = 'a';

Β initscr();

2.Β Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ символами, обновляя физичСский экран, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ логичСский экран:

Β move(5, 5);

Β printw(&quot;%s&quot;, &quot;Testing multiple windows&quot;);

Β refresh();

Β for (y_loop = 0; y_loop &lt; LINES - 1; y_loop++) {

Β Β for (x_loop = 0; x_loop &lt; COLS - 1; x_loop++) {

Β  Β mvwaddch(stdscr, y_loop, x_loop, a_letter);

Β  Β a_letter++;

Β Β  if (a_letter &gt; 'z') a_letter = 'a';

Β  }

Β }

Β /* ОбновлСниС экрана */

Β refresh();

Β sleep(2);

3.Β Π’Π΅ΠΏΠ΅Ρ€ΡŒ создайтС ΠΎΠΊΠ½ΠΎ 10Γ—20 ΠΈ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π² Π½Π΅Π³ΠΎ тСкст ΠΏΠ΅Ρ€Π΅Π΄ прорисовкой ΠΎΠΊΠ½Π° Π½Π° экранС:

Β new_window_ptr = newwin(10, 20, 5, 5);

Β mvwprintw(new_window_ptr, 2, 2, &quot;%s&quot;, &quot;Hello World&quot;);

Β mwwprintw(new_window_ptr, 5, 2, &quot;%s&quot;,

Β  &quot;Notice how very long lines wrap inside the window&quot;);

Β wrefresh(new_window_ptr);

Β sleep(2);

4.Β Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ содСрТимоС Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. Когда Π²Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ экран, ΠΎΠΊΠ½ΠΎ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚

new_window_ptr
, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Ρ‚Π΅ΠΌΠ½Π΅Π½ΠΎ:

Β a_letter = '0';

Β for (y_lΠΎΠΎΡ€ = 0; y_lΠΎΠΎΡ€ &lt; LINES - 1; y_lΠΎΠΎΡ€++)Β {

Β Β for (Ρ…_lΠΎΠΎΡ€ = 0; xloop &lt; COLS - 1; Ρ…_lΠΎΠΎΡ€++) {

Β  Β mvwaddch(stdscr, y_loop, Ρ…_lΠΎΠΎΡ€, a_letter);

Β  Β a_letter++;

Β  Β if (a_letter &gt; '9') a_letter = '0';

Β  }

Β }

Β refresh();

Β sleep(2);

5. Если Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π²Ρ‹Π·ΠΎΠ² для обновлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ измСнится, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ Π½Π΅ измСняли Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ:

Β wrefresh(new_window_ptr);

Β sleep(2);

6. Но Ссли Π²Ρ‹ сначала Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ

touchwin
ΠΈ заставитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ curses Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ wrefresh снова ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅ΠΌ ΠΏΠ»Π°Π½Π΅.

Β touchwin(new_window_ptr);

Β wrefresh(new_window_ptr);

Β sleep(2);

7.Β Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ΡΡ ΠΎΠΊΠ½ΠΎ с Ρ€Π°ΠΌΠΊΠΎΠΉ Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π΅Π³ΠΎ.

Β popup_window_ptr = newwin(10, 20, 8, 8);

Β box(popup_window_ptr, '|', '-');

Β mvwprintw(popup_window_ptr, 5, 2, &quot;%s&quot;, &quot;Pop Up Window!&quot;);

Β wrefresh(popup_window_ptr);

Β sleep(2);

8.Β ΠŸΠΎΠΈΠ³Ρ€Π°ΠΉΡ‚Π΅ с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… очисткой ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ.

Β touchwin(new_window_ptr);

Β wrefresh(new_window_ptr);

Β sleep(2);

Β wclear(new_window_ptr);