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