2015-10-25 2 views
1

Я на самом деле кодирую редактор в консоли, что-то вроде nano. Для ввода пользовательского ввода я разместил окно внутри панели и использовал функцию mvwprintw для запроса ввода пользователя. После многих тестов я уверен, что входные данные получаются, но он не отображается, пока пользователь печатает. У кого-то есть идея решить эту проблему? спасибо.Как отобразить ввод пользователя в панели

void keybord::init_panel_window() 

{ 

//prepare the window  

int x, y, i; 

bool show_it=true; 

char label[1000]; 

y = 2; 

x = 10; 

my_wins = newwin(10, 40, y, x); 

field[0] = new_field(1, 10, y, x, 0, 0); 

field[1] = NULL; 

    field[2] = NULL; 

//char user_input[1000]; 

//attach panel to window and put this panel on top 
my_panels = new_panel(my_wins); 
set_panel_userptr(my_panels, &show_it); 
update_panels(); 
doupdate(); 

sprintf(label, " enter your message "); 
//show the window by printing box arround window 
int startx, starty, height, width; 
getbegyx(my_wins, starty, startx); 
getmaxyx(my_wins, height, width); 
box(my_wins, 0, 0); 
mvwaddch(my_wins, 2, 0, ACS_LTEE); 
mvwhline(my_wins, 2, 1, ACS_HLINE, width - 2); 
mvwaddch(my_wins, 2, width - 1, ACS_RTEE); 
print_in_middle(my_wins, 1, 0, width, label, COLOR_PAIR(2)); 
//show_panel(my_panels);  
}` 


    void keybord::print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color) 
    {  int length, x, y; 
     float temp; 
     char user_input[100]; 


    show_panel(my_panels); //show the panel 

    if(win == NULL) 
      win = stdscr; 
    getyx(win, y, x); 
    if(startx != 0) 
      x = startx; 
    if(starty != 0) 
      y = starty; 
    if(width == 0) 
      width = 80; 

    length = strlen(string); 
    temp = (width - length)/ 2; 
    x = startx + (int)temp; 

    // mvwprintw(win, y, x, " %s", string); 
    mvwscanw(win,y+5,x+4,"%s",user_input); //USER INPUT , IT'S WORKINK BUT THE INPUT IS NOT DISPLAYING WHILE THE USER IS TYPING 
    refresh(); 
    printw("value : %s************************* ",user_input); 
     wattron(win, color); 
    mvwprintw(win, y, x, " %s", user_input); 
    refresh(); 
    wattroff(win, color); 
    // hide_panel(my_panels); 
} 

ответ

0

Ваша полная программа не отображается, но простой/вероятное объяснение состоит в том, что в инициализации он вызывает noecho() и стандартный экран stdscr используется, например, путем передачи NULL в качестве первого параметра keybord::print_in_middle().

Если echo() включен для параметра winkeybord::print_in_middle(), он будет вести себя так, как вы планировали.

+0

Это работает сейчас. Спасибо большое. Я не понял этот момент в библиотеке :) –