下面是我的代码。我有一个主窗口,有两个选择,我希望用户能够仅使用 KEY_LEFT 和 KEY_RIGHT 来回键入。我现在就以一种简单的方式设置了它(或者我是这么认为的),只需将光标直接移动到其中一个选项即可。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <curses.h>
#include <time.h>
int main()
{
int j = 0, highlight = 0, choice;
int x = 0, y = 0;
initscr();
noecho();
cbreak();
WINDOW * mainwin = newwin(20, 52, 0, 0);
refresh();
while (1)
{
keypad(mainwin, TRUE);
box(mainwin, 0, 0);
mvwprintw(mainwin, 1, 1, " L I C E N S E P L A T E");
mvwprintw(mainwin, 3, 2, "RAW ADDITION COMPARISON");
wmove(mainwin, 3, 2);
wattron(mainwin, A_BLINK);
refresh();
wrefresh(mainwin);
choice = wgetch(mainwin);
switch(choice)
{
case KEY_LEFT:
wmove(mainwin, 3, 2);
wrefresh(mainwin);
case KEY_RIGHT:
wmove(mainwin, 3, 26);
wrefresh(mainwin);
default:
wmove(mainwin, 3, 2);
wattroff(mainwin, A_BLINK);
wrefresh(mainwin);
}
if (choice == '\n')
{
if (highlight == 0) // RAW ADDITION
{
char lp[8];
char num[10];
int n;
WINDOW * win = subwin(mainwin, 30, 45, 1, 1);
refresh();
box(win, 1, 1);
mvwprintw(win, 2, 2, "RAW ADDITION");
mvwprintw(win, 3, 2, "Enter a license plate and an integer.");
mvwprintw(win, 5, 3, "._________. ._____________.");
mvwprintw(win, 6, 3, "| | | |");
mvwprintw(win, 7, 3, "'---------' '-------------'");
wmove(win, 6, 5);
wrefresh(win);
mvwgetnstr(win, 6, 5, lp, 7);
wrefresh(win);
wmove(win, 6, 26);
wrefresh(win);
mvwgetnstr(win, 6, 26, num, 10);
wrefresh(win);
n = atoi(num);
}
else // COMPARISON
{
}
}
if (toupper(choice) == 'Q')
break;
else if (choice == KEY_LEFT)
{
wmove(mainwin, 3, 2);
wrefresh(mainwin);
}
else if (choice == KEY_RIGHT)
{
wmove(mainwin, 3, 26);
wrefresh(mainwin);
}
}
endwin();
exit(EXIT_SUCCESS);
return 0;
}
在上面的代码中,我必须 try catch 用户按下向左或向右箭头键时的代码块,并将窗口中的光标移动到适当的选择(原始地址或比较)。然而,由于某种原因,我无法得到任何东西来响应箭头键。 wmove() 函数或 keypad() 函数是否缺少某些内容?我在这里不明白什么?移动函数是否相对于光标上次所在的位置移动?
谢谢!
最佳答案
switch 语句中的 wmove
调用没有太大效果,因为导致 wgetch
的逻辑将光标移回到同一点:
wmove(mainwin, 3, 2);
wattron(mainwin, A_BLINK);
refresh();
wrefresh(mainwin);
choice = wgetch(mainwin);
顺便说一句,快速阅读源代码后,似乎不需要 refresh()
调用...
关于在curses 中无法使用箭头键移动光标(C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50082013/