selectWin(wattrset方式实现)

本文详细介绍了如何利用ncurses库中的wattrset函数来创建和定制窗口selectWin,包括设置窗口属性、颜色和样式,以达到控制终端输出的视觉效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//程序说明:此程序主要通过创建一系列小窗口来实现按上下键实现行选择的功能
#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);
    }
}

}

运行结果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值