linux curses库下子窗口实现行选择的功能

来源:互联网 发布:python与量化投资 编辑:程序博客网 时间:2024/06/04 23:34

//程序说明:此程序主要通过创建一系列小窗口来实现按上下键实现行选择的功能

#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);
    }
}
}


原创粉丝点击