⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 button.c

📁 linux环境下结合ncurse库
💻 C
字号:
/*
	Button struct 函数实现
*/
#include "BaseEnvInit.h"
#include"Button.h"

void ChangeButton(Button **ppButton)
{
	Button * ptempbutton=*ppButton;
	*ppButton=MakeButton(*ppButton);
	ptempbutton->FreeButton(ptempbutton);
}

void FreeButton(Button * pButton)
{	
	int i;
	for(i=0;i<3;i++)
	{
		if(delwin(pButton->m_winarr[i])==ERR)
		{
			fprintf(stderr,"Error - in FreeButton delwin(pButton->m_winarr[i]) false. exit program");
			endwin();
			exit(2);
		}
	}
	free(pButton); 
}

int FocusButton(Button * pButton)
{
	int key;
	keypad(pButton->m_winarr[2],TRUE);
	wattron(pButton->m_winarr[2],A_REVERSE);

	if(pButton->m_isbox==TRUE)
	{
		mvwprintw(pButton->m_winarr[2],1,1,pButton->m_name);
	}
	else
	{
		mvwprintw(pButton->m_winarr[2],0,1,pButton->m_name);
	}

	wattroff(pButton->m_winarr[2],A_REVERSE);
	ShowButton(pButton);
	do
	{
		key=wgetch(pButton->m_winarr[2]);
		if ( !(key==10 || key==KEY_UP || key==KEY_DOWN || key==KEY_RIGHT ||key==9 ||key==KEY_LEFT) )
		{
			continue;
		}
		break;
	}
	while (1);

	if(key==10)  
	{
		mvwin(pButton->m_winarr[2],pButton->m_py+1,pButton->m_px+1);
		pButton->ShowButton(pButton);
		usleep(100000);
		mvwin(pButton->m_winarr[2],pButton->m_py,pButton->m_px);
		if(pButton->m_isbox==TRUE)
		{
			mvwprintw(pButton->m_winarr[2],1,1,pButton->m_name);
		}
		else
		{
			mvwprintw(pButton->m_winarr[2],0,1,pButton->m_name);
		}
		pButton->ShowButton(pButton);
	}

	if(pButton->m_isbox==TRUE)
	{
		mvwprintw(pButton->m_winarr[2],1,1,pButton->m_name);
	}
	else
	{
		mvwprintw(pButton->m_winarr[2],0,1,pButton->m_name);
	}
	
	ShowButton(pButton);

	return key;
}

void ShowButton(Button *pButton)
{
	int i;
	for(i=0;i<3;i++)
	{
		touchwin(pButton->m_winarr[i]);
		wrefresh(pButton->m_winarr[i]);
	}
}

Button * MakeButton(Button * pButton)
{
	int i=0;
	Button * p=NULL;
	p=(Button *)malloc(sizeof(Button));

	if(!p)
	{
		return NULL;
	}
	if(pButton==NULL)
	{
		p->m_px=0;
		p->m_py=0;
		p->m_sizex=7;
		p->m_sizey=3;
		p->m_color_top=WHITE_RED;
		p->m_color_mid=BLACK_BLACK;
		p->m_color_foot=WHITE_WHITE;
		p->m_isbox=true;
		p->m_kind=YESBUTTON;
		p->m_buttonid=0;
		strcpy(p->m_name,"Button");
	}
	else
	{
		memcpy(p,pButton,sizeof(Button));
	}
	p->m_winarr[0]=newwin(p->m_sizey+1,p->m_sizex+1,p->m_py,p->m_px);
	p->m_winarr[1]=newwin(p->m_sizey,p->m_sizex,p->m_py+1,p->m_px+1);
	p->m_winarr[2]=newwin(p->m_sizey,p->m_sizex,p->m_py,p->m_px);
	
	wbkgd(p->m_winarr[0],COLOR_PAIR(p->m_color_foot));
	wbkgd(p->m_winarr[1],COLOR_PAIR(p->m_color_mid));
	wbkgd(p->m_winarr[2],COLOR_PAIR(p->m_color_top));

	if(p->m_isbox==TRUE)
		box(p->m_winarr[2],0,0);

	//wattron(p->m_winarr[2],A_REVERSE);

	if(p->m_isbox==TRUE)
	{
		mvwprintw(p->m_winarr[2],1,1,p->m_name);
	}
	else
	{
		mvwprintw(p->m_winarr[2],0,1,p->m_name);
	}

	p->InitButton=MakeButton;
	p->ShowButton=ShowButton;
	p->FreeButton=FreeButton;
	p->FocusButton=FocusButton;
	p->ChangeButton=ChangeButton;
	return p;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -