2016-04-22 27 views
2

我正在使用ncurses为我的应用程序制作一个简单的TUI。 我得到了创建和打印到窗口的基础知识,但是我遇到了输入问题。光标在打字时留下窗口(ncurses)

当我写完时,光标定位在字符串的结尾我写 enter image description here

但是,当我开始打字,光标移动到终端窗口的左上角。

enter image description here

我怎样才能保持它的地方,而打字?

这里是我的代码:

#include <ncurses.h> 

WINDOW *win; 
int startx, starty, width, height; 
int cport; 


WINDOW *makewin(int h, int w, int y, int x) 
{ 
    WINDOW *lwin; 

    lwin = newwin(h, w, y, x); 
    box(lwin, 0 , 0); 
    wrefresh(lwin); 

    return lwin; 
} 

void dewin(WINDOW *lwin) 
{ 
    wborder(lwin, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '); 
    wrefresh(lwin); 
    delwin(lwin); 
} 

void getPort(){ 
    win = makewin(height, width, starty, startx); 
    wbkgd(win, COLOR_PAIR(1)); 
    mvwprintw(win, 0, 8, "Port Settings"); 
    mvwprintw(win, 2, 4, "Set port server should"); 
    mvwprintw(win, 3, 4, "listen to: "); 
    wrefresh(win); 

    scanw("%d", &cport); 
} 

int main() 
{ 
    initscr(); 
    cbreak(); 
    keypad(stdscr, TRUE); 


     start_color(); 

     init_pair(1,COLOR_WHITE, COLOR_BLACK); 
     init_pair(2,COLOR_WHITE, COLOR_BLUE); 
     bkgd(COLOR_PAIR(2)); 
     refresh(); 

     height = 6; 
     width = 30; 
     starty = (LINES - height)/2; 
     startx = (COLS - width)/2; 

     getPort(); 


    getch(); 

    dewin(win); 
    endwin(); 
    return 0; 
} 
+0

谢谢!我甚至没有想过,Windows也有专门的阅读功能,就像打印一样。使用** wscanw **解决了问题:) – Nidrax

回答

0

这是因为您正在使用scanw(...)函数,最终的行为如wscanw(stdscr, ...)stdscr获取输入。使用wscanw函数来解决问题。

1

scanw(和wscanw)最终调用wgetch,这刷新给出它的参数窗口:

如果窗口是不是垫,它有自上次调用wrefresh,wrefresh以来将被移动或修改为 在另一个字符被读取之前调用。

也就是说,对于stdscr的挂起更改(包括擦除由于initscr)将由平纹scanw来施加。光标将保留在程序要求输入的窗口中的当前位置。