Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ncurses在pad中包装文本。(C)中_C_Linux_Ncurses - Fatal编程技术网

使用ncurses在pad中包装文本。(C)中

使用ncurses在pad中包装文本。(C)中,c,linux,ncurses,C,Linux,Ncurses,我一直在玩ncurses,在网上我发现很少有关于pad的有用信息。据我所知,PAD是一种较大的屏幕外窗口,其部分可以打印在屏幕上较小的窗口上 我写了一个程序在屏幕上打印便笺簿的上下文。问题是,该程序似乎只打印“行到行”,而不环绕文本 程序的输出如下所示: abcdefghij abcdefghij abcdefghij 但应该是这样的: abcdefghij klmnopqrst uvwxyzabc 在后一种情况下,同一行“环绕”,而不是打印多行 有谁能告诉我如何实现这种包装功能?(即:魔法?)

我一直在玩ncurses,在网上我发现很少有关于pad的有用信息。据我所知,PAD是一种较大的屏幕外窗口,其部分可以打印在屏幕上较小的窗口上

我写了一个程序在屏幕上打印便笺簿的上下文。问题是,该程序似乎只打印“行到行”,而不环绕文本

程序的输出如下所示:

abcdefghij

abcdefghij

abcdefghij

但应该是这样的:

abcdefghij

klmnopqrst

uvwxyzabc

在后一种情况下,同一行“环绕”,而不是打印多行

有谁能告诉我如何实现这种包装功能?(即:魔法?)

询问您是否需要进一步的详细信息,程序的源代码:

#include <unistd.h>
#include <curses.h>

int main()
{
    WINDOW *pad_ptr;
    int x, y;
    int pad_lines;
    int pad_cols;
    char disp_char;

    initscr();

    pad_lines = LINES + 50;
    pad_cols = COLS + 50;

    pad_ptr = newpad(pad_lines, pad_cols);

    disp_char = 'a';
    for(x = 0; x < pad_lines; x++)
    {
            for(y = 0; y < pad_cols; y++)
            {
                    mvwaddch(pad_ptr, x, y, disp_char);
                    if(disp_char == 'z')
                            disp_char = 'a';
                    else
                            disp_char++;
            }
    }

/* We just filled the pad with letters from the alphabet. */

/* Now we will fill part of the main window with a 10x10 section
 * of the pad.
 * Notice that the text does not wrap around. (Where is 'k'?)
 */

    prefresh(pad_ptr, 0, 0, 3, 3, 9+3, 9+3);
    sleep(3000);

//  prefresh(pad_ptr, LINES + 5, COLS + 7, 5, 5, 21, 19);
//  sleep(4);

    delwin(pad_ptr);

    endwin();

    exit(0);
}
#包括
#包括
int main()
{
窗*垫ptr;
int x,y;
int pad_线;
国际货币基金组织;
字符显示字符;
initscr();
pad_线=线+50;
pad_cols=cols+50;
焊盘ptr=新焊盘(焊盘线、焊盘线);
disp_char='a';
对于(x=0;x
将pad_行和pad_列更改为9,看看你是否更快乐

假设系统中的行和列数为100。您正在焊盘中创建一个10+k阵列,如下所示:

a-z..a-z..a-z..a-k
l-z..a-z..a-z..a-d  
e-z..a-z..a-z..a-o //etc

然后您的
prefresh()
会在屏幕上显示前9列(共9行)。

您误解了焊盘的工作方式

Pad允许您创建一个窗口(可能比物理屏幕大),然后显示窗口的子集。使用prefresh显示焊盘时,显示的是焊盘子集的视图。当显示焊盘的子集时,不会更改(或包装)内容

如果将下面的代码添加到示例中,则每次按一个键时都会看到视口移动,但填充板的内容没有更改

for (x=0; x<10; x++) {
    prefresh(pad_ptr, 0, x, 3, 3, 9+3, 9+3);
    wgetch(pad_ptr);
}
(x=0;x)的