//程序说明:此程序主要通过创建一系列小窗口来实现按上下键实现行选择的功能
#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;
initial();
start_color();
init_pair(1,COLOR_WHITE ,COLOR_BLACK);//设置颜色,字体和背景色
init_pair(2,COLOR_BLUE ,COLOR_WHITE);
init_pair(3,COLOR_RED ,COLOR_WHITE);
init_pair(4,COLOR_GREEN ,COLOR_BLUE);
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++)
{
char tempstr[256];
items[i] = subwin(stdscr,1,50,i+2,1);//创建子窗口
sprintf(tempstr,"DIA%d %s300 %s1000 %s2 ",i,space5,space5,space5);
waddstr(items[i],tempstr);
//wnoutrefresh(stdscr);
wbkgd(items[i],COLOR_PAIR(1));
wrefresh(items[i]);
}
move(2,1);
refresh();
wbkgd(items[selected],COLOR_PAIR(2));
wrefresh(items[selected]);
while (1)
{
key=getch();
if (key==KEY_DOWN || key==KEY_UP)
{
wbkgd(items[selected],COLOR_PAIR(1));
wrefresh(items[selected]);
if (key==KEY_DOWN)
{
selected=(selected+1) % count;
}
else
{
selected=(selected+count-1) % count;
}
wbkgd(items[selected],COLOR_PAIR(2));
wrefresh(items[selected]);
doupdate();
}
else if (key==ESCAPE)
{
endwin();
exit(1);
}
}
}