2016-04-22 3 views
2

私のアプリケーション用の単純なTUIを作成するのにncursesを使用しています。 ウィンドウの作成と印刷の基本がありますが、入力に問題があります。入力時にカーソルが葉に残る(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

ありがとうございました!私は考えていませんでした。窓には印刷のための専用機能があります。 ** wscanw **を使用して問題を修正しました:) – Nidrax

答えて

0

scanw(...)の機能を使用しています。最終的には、stdscrから入力を得るwscanw(stdscr, ...)のように機能しているからです。問題を解決するにはwscanw関数を使用してください。

1

scanw(およびwscanw)最終的にはそのパラメータとして与えられたウィンドウをリフレッシュされ、wgetchを呼び出す:

ウィンドウがパッドではなく、それが持っている場合wrefreshへの最後の呼び出し以降に移動または変更された場合、別の文字が読み取られる前に と呼ばれるwrefreshになります。 、stdscr用(initscrによる消失を含む)任意の保留中の変更は普通scanwによって適用されるであろうれる

。カーソルは、プログラムが入力を求めるウィンドウ内の現在の位置に置かれます。

関連する問題