gpt4 book ai didi

c - Ncurses 和调整窗口大小

转载 作者:行者123 更新时间:2023-11-30 17:16:14 25 4
gpt4 key购买 nike

我尝试在窗口底部输入文本并将其打印在顶部。我这样做了。但是,当我调整窗口大小时,光标会附着在窗口底部,并且当我键入文本时,符号不会在屏幕上回显。怎么解决?

抱歉我的英语不好。

我的代码:

#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();
}

最佳答案

有几个问题:

  • ncurses 已经处理 SIGWINCH ,如 resizeterm 中所述手册页。
  • 如果您没有为 SIGWINCH 添加自己的处理程序,您可以(如果您首先调用 keypad(stdscr,TRUE) )检查 KEY_RESIZE .
  • 信号处理程序中使用的函数使用起来不安全;该程序可能会因多种原因而失败。

KEY_RESIZE ncurses - resizing glitch 中讨论,例如。

关于c - Ncurses 和调整窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29717192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com