📄 button.c
字号:
#include "button.h"
#include <unistd.h>
#include <malloc.h>
void show_button(BUTTON * b)
{
touchwin(b->b[0]);
wrefresh(b->b[0]);
touchwin(b->b[1]);
wrefresh(b->b[1]);
touchwin(b->b[2]);
wrefresh(b->b[2]);
}
void set_color(BUTTON *b,int c1,int c2,int c3)
{
b->pair_color[0]=c1;
b->pair_color[1]=c2;
b->pair_color[2]=c3;
wbkgd(b->b[0],COLOR_PAIR(c1));
wbkgd(b->b[1],COLOR_PAIR(c2));
wbkgd(b->b[2],COLOR_PAIR(c3));
box(b->b[2],0,0);
mvwprintw(b->b[2],1,2,"%s",b->str);
show_button(b);
}
void free_button(BUTTON ** b)
{
delwin((*b)->b[0]);
delwin((*b)->b[1]);
delwin((*b)->b[2]);
free(*b);
*b=NULL;
curs_set(1);
}
int attack_button(BUTTON * b,int front,int next,int tab)
{
int x=0,y=0;
int temp=0;
int sign=1;
cbreak();
noecho();
keypad(b->b[2],TRUE);
getbegyx(b->b[2],x,y);
do
{
temp=wgetch(b->b[2]);
switch (temp)
{
case 259/*向上键*/:
if(front != 0)
{
set_color(b,b->pair_color[0],b->pair_color[1],b->pair_color[2]);
echo();
nocbreak;
return front;
}
continue;
case 258/*向下键*/:
if(next != 0)
{
set_color(b,b->pair_color[0],b->pair_color[1],b->pair_color[2]);
echo();
nocbreak;
return next;
}
continue;
case 260/*向左键*/:
if(front != 0)
{
set_color(b,b->pair_color[0],b->pair_color[1],b->pair_color[2]);
echo();
nocbreak;
return front;
}
continue;
case 261/*向右键*/:
if(next != 0)
{
set_color(b,b->pair_color[0],b->pair_color[1],b->pair_color[2]);
echo();
nocbreak;
return next;
}
continue;
case 9/*Tab键*/:
if(tab != 0)
{
set_color(b,b->pair_color[0],b->pair_color[1],b->pair_color[2]);
echo();
nocbreak;
return tab;
}
continue;
case 10/*回车键*/:
mvwin(b->b[2],x+1,y+1);
show_button(b);
usleep(250000);
mvwin(b->b[2],x,y);
show_button(b);
set_color(b,b->pair_color[0],b->pair_color[1],b->pair_color[2]);
echo();
nocbreak;
sign=0;
break;
default/*其他键*/:
continue;
}
}
while (sign);
return 0;
}
void pitch_on_button(BUTTON *b)
{
int x=0,y=0;
getbegyx(b->b[2],x,y);
move(x,y);
wattron(b->b[2],A_REVERSE);
wattroff(b->b[2],COLOR_PAIR(b->pair_color[2]));
mvwprintw(b->b[2],1,1," %s ",b->str);
wrefresh(b->b[2]);
curs_set(0);
wattron(b->b[2],COLOR_PAIR(b->pair_color[2]));
wattroff(b->b[2],A_REVERSE);
}
BUTTON *createButton(int startx,int starty,int h,int l,char *str)
{
BUTTON *b=(BUTTON *)malloc(sizeof(BUTTON));
b->b[0]=newwin(h+1,l+1,startx,starty);
b->b[1]=newwin(h,l,startx+1,starty+1);
b->b[2]=newwin(h,l,startx,starty);
b->str=str;
b->setColor=set_color;
b->free=free_button;
b->attack=attack_button;
b->show=show_button;
b->pitch_on=pitch_on_button;
return b;
}
/*
int main()
{
initscr();
char *str="确定";
if(has_colors==FALSE)
{
endwin();
exit(0);
}
start_color();
init_pair(1,COLOR_BLACK,COLOR_WHITE);
init_pair(2,COLOR_RED,COLOR_BLUE);
init_pair(3,COLOR_BLACK,COLOR_RED);
wbkgd(stdscr,COLOR_PAIR(1));
refresh();
//////////////////////////////////////////////////
BUTTON *b=createButton(10,42,3,8,str);
b->setColor(b,1,2,3);
b->show(b);
b->pitch_on(b);
b->attack(b,0,0,0);
b->setColor(b,1,2,3);
b->free(&b);
//////////////////////////////////////////////////
attroff(COLOR_PAIR(1));
attroff(COLOR_PAIR(2));
attroff(COLOR_PAIR(3));
endwin();
return 0;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -