2016-04-22 66 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來施加。光標將保留在程序要求輸入的窗口中的當前位置。

相關問題