gpt4 book ai didi

打字时光标离开窗口(ncurses)

转载 作者:太空狗 更新时间:2023-10-29 12:27:52 28 4
gpt4 key购买 nike

我正在使用 ncurses 为我的应用程序制作一个简单的 TUI。我掌握了创建和打印到窗口的基础知识,但我在输入方面遇到问题。

当我写完的时候,光标定位在我写的字符串的末尾 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;
}

最佳答案

scanw (和 wscanw)最终调用 wgetch ,它刷新作为其参数给出的窗口:

If the window is not a pad, and it has been moved or modified since the last call to wrefresh, wrefresh will be called before another character is read.

也就是说,stdscr 的任何未决更改(包括由于 initscr 而导致的删除)将由普通 scanw 应用。光标将留在程序要求输入的窗口中的当前位置。

关于打字时光标离开窗口(ncurses),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36799308/

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