//程序说明:此程序主要通过创建一系列小窗口来实现按上下键实现行选择的功能
#include <curses.h>
#include <stdlib.h>
#include<stdio.h>
#include <unistd.h>
#define ENTER 10
#define ESCAPE 27
const char* space5 = " ";
void initial()
{
initscr();
cbreak();
nonl();
noecho();
intrflush(stdscr,false);
keypad(stdscr,true);//开启 keypad后,可以使用键盘上的一些特殊字元, 如上下左右等方向键,curses 会将这些特殊字元转换成 curses.h 内定义的一些特殊键.
refresh();
}
main()
{
int selected=0;
int count = 9;
int key;
char tempstr[256];
initial();
box(stdscr,'|','-');
mvwaddstr(stdscr,1,1," PID | ACTDIANUM | CAPS | LOAD ");
WINDOW **items;
items=(WINDOW **)malloc(9*sizeof(WINDOW *));
for(int i=0;i<9;i++)
{
items[i] = subwin(stdscr,1,50,i+2,1);//创建子窗口
wprintw(items[i], "DIA%d %s300 %s1000 %s2 ",i,space5,space5,space5 );
wrefresh(items[i]);
}
move(2,1);
refresh();
wattrset(items[selected],A_STANDOUT);
wmove(items[selected], 0,0);
wprintw(items[selected], "DIA%d %s300 %s1000 %s2 ",selected,space5,space5,space5 );
wrefresh(items[selected]);
while (1)
{
key=getch();
if (key==KEY_DOWN || key==KEY_UP)
{
wattrset(items[selected],A_NORMAL);
wmove(items[selected], 0,0);
wprintw(items[selected], "DIA%d %s300 %s1000 %s2 ",selected,space5,space5,space5 );
wrefresh(items[selected]);
if (key==KEY_DOWN)
{
selected=(selected+1) % count;
}
else
{
selected=(selected+count-1) % count;
}
wattrset(items[selected], A_STANDOUT);
wmove(items[selected], 0,0);
wprintw(items[selected], "DIA%d %s300 %s1000 %s2 ",selected,space5,space5,space5 );
wrefresh(items[selected]);
doupdate();
}
else if (key==ESCAPE)
{
endwin();
exit(1);
}
}
#include <curses.h>
#include <stdlib.h>
#include<stdio.h>
#include <unistd.h>
#define ENTER 10
#define ESCAPE 27
const char* space5 = " ";
void initial()
{
initscr();
cbreak();
nonl();
noecho();
intrflush(stdscr,false);
keypad(stdscr,true);//开启 keypad后,可以使用键盘上的一些特殊字元, 如上下左右等方向键,curses 会将这些特殊字元转换成 curses.h 内定义的一些特殊键.
refresh();
}
main()
{
int selected=0;
int count = 9;
int key;
char tempstr[256];
initial();
box(stdscr,'|','-');
mvwaddstr(stdscr,1,1," PID | ACTDIANUM | CAPS | LOAD ");
WINDOW **items;
items=(WINDOW **)malloc(9*sizeof(WINDOW *));
for(int i=0;i<9;i++)
{
items[i] = subwin(stdscr,1,50,i+2,1);//创建子窗口
wprintw(items[i], "DIA%d %s300 %s1000 %s2 ",i,space5,space5,space5 );
wrefresh(items[i]);
}
move(2,1);
refresh();
wattrset(items[selected],A_STANDOUT);
wmove(items[selected], 0,0);
wprintw(items[selected], "DIA%d %s300 %s1000 %s2 ",selected,space5,space5,space5 );
wrefresh(items[selected]);
while (1)
{
key=getch();
if (key==KEY_DOWN || key==KEY_UP)
{
wattrset(items[selected],A_NORMAL);
wmove(items[selected], 0,0);
wprintw(items[selected], "DIA%d %s300 %s1000 %s2 ",selected,space5,space5,space5 );
wrefresh(items[selected]);
if (key==KEY_DOWN)
{
selected=(selected+1) % count;
}
else
{
selected=(selected+count-1) % count;
}
wattrset(items[selected], A_STANDOUT);
wmove(items[selected], 0,0);
wprintw(items[selected], "DIA%d %s300 %s1000 %s2 ",selected,space5,space5,space5 );
wrefresh(items[selected]);
doupdate();
}
else if (key==ESCAPE)
{
endwin();
exit(1);
}
}
}
运行结果如下: