Ниже мой код. У меня есть главное окно с двумя вариантами, которые я хочу, чтобы пользователь мог переключаться назад и вперед, просто используя 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;
}
В приведенном выше коде мне нужно блоки кода, которые пытаются перехватить, когда пользователь нажимает клавишу со стрелкой влево или вправо, и переместить курсор в окне к соответствующему выбору (RAW ADDRESS или COMPARISON). Однако по какой-то причине я не могу ничего ответить на клавиши со стрелками. Я что-то упускаю с помощью функции wmove () или keypad ()? Что я здесь не понимаю? Перемещается ли функция перемещения относительно того места, где курсор был последним?
Спасибо!