2015-04-18 2 views
0

Я попытался ввести текст в нижней части окна и напечатать его сверху. Я сделал это. Но когда я изменяю размер окна, курсор прикрепляется к нижней части окна, и когда я набираю текст, символы не выделяются на экране. Как это исправить?Окна Ncurses и Resize

Извините за мой английский.

мой код:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ncurses.h> 
#include <termios.h> 
#include <sys/ioctl.h> 
#include <signal.h> 

WINDOW* txt_win; 
WINDOW* msg_win; 


void sig_winch(int in) { 

    struct winsize size; 
    ioctl(fileno(stdout), TIOCGWINSZ, (char*) &size); 
    resizeterm(size.ws_row, size.ws_col); 
    // wprintw(msg_win,"%i, %i", LINES, COLS); 
    // wmove(msg_win, 0, 0); 
    // wresize(msg_win, LINES - 4, COLS); 
    wrefresh(msg_win); 
    // mvcur(LINES - 3, 0, LINES - 3, 0); 
    // setsyx(LINES - 3, 0); 
    // wmove(txt_win, LINES - 3, 0); 
    // wresize(txt_win, 3, COLS); 
    wrefresh(txt_win); 
    echo(); 

    } 

int main() { 

     int x = LINES - 1; 
     int y = 0; 

     if (!initscr()) 
     { 
      fprintf(stderr, "Error initialising ncurses.\n"); 
      exit(1); 
     } 

     signal(SIGWINCH, sig_winch); 

     initscr(); 
     curs_set(1); 
     refresh(); 

     char str[256]; 
        // dy dx   y   x 
     msg_win = newwin(LINES - 4, COLS, 0, 0); 
     txt_win = newwin(3, COLS,  LINES - 3, 0); 
     keypad(txt_win, 1); 

     int line = 0; 
     while (1) { 

      wrefresh(txt_win); 
      curs_set(1); 
      if (wgetnstr(txt_win, str, 256) == 0) { 
       wclear(txt_win); 
       curs_set(0); 
       waddstr(msg_win, str); 
       wrefresh(msg_win); 
      } 
     } 


    getch(); 

    delwin(txt_win); 
    delwin(msg_win); 

    endwin(); 
} 

ответ

0

Есть несколько вопросов:

  • Ncurses уже обрабатывает SIGWINCH, как было отмечено на странице руководства по resizeterm.
  • Если вы не добавили свой собственный обработчик для SIGWINCH, вы могли бы (если вы сначала позвонили keypad(stdscr,TRUE)), проверьте на KEY_RESIZE.
  • Функции, используемые в вашем обработчике сигналов, небезопасны в использовании; программа может выйти из строя по ряду причин.

KEY_RESIZE обсуждается в ncurses - resizing glitch, например.

Смежные вопросы