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

📄 gui.c

📁 PDA程序开发PDA程序开发PDA程序开发PDA程序开发PDA程序开发PDA程序开发PDA程序开发PDA程序开发
💻 C
📖 第 1 页 / 共 2 页
字号:
	else return 0;
}
void InitRect(short left,short top,short right,short bottom,PDARECT *pRc)
{
	pRc->left=left;
	pRc->top=top;
	pRc->right=right;
	pRc->bottom=bottom;
}

























typedef struct _BMPHEAD
{
	unsigned char mode;
	unsigned char gray;
	unsigned short width;
	unsigned short high;
}BMPHEAD;

/*======================================================================
---在LCD中以包括图象头的图象数据s显示一幅图象----DispBmp---
======================================================================*/
void DispBmp(short x,short y,unsigned char *s)
{
	BMPHEAD *pBmphead=(BMPHEAD *)s;
	if(pBmphead->mode==0&&pBmphead->gray==4)DispImage(x,y,pBmphead->width,pBmphead->high,&s[sizeof(BMPHEAD)]);
}
void DispBmpGray(short x,short y,unsigned char *s)
{
	BMPHEAD *pBmphead=(BMPHEAD *)s;
	if(pBmphead->mode==0&&pBmphead->gray==4)DispImageGray(x,y,pBmphead->width,pBmphead->high,&s[sizeof(BMPHEAD)]);
}



unsigned char * GetFont8x16(unsigned char CharCode)
{
	return RomAddress+ROM_ASCII16+(long)(CharCode*16);
}
unsigned char * GetFont16x16(unsigned short CharCode)
{
	return RomAddress+ROM_HZK16+(((((CharCode&0x00ff)-0xa1)*94+((CharCode>>8)-0xa1)))*32);
}
short DispChar(short x,short y,unsigned short CharCode,unsigned char FrontColor,unsigned char BackColor)
{
	short i,j;
	unsigned char mask,*s;
	if((CharCode>>8)&0x80)
	{
		if(16+x>=LCD_WIDTH)return 0;
		s=GetFont16x16(CharCode);
		for(j=y;j<y+16;j++)
		{
			mask=0x80;
			for(i=0;i<8;i++)
			{
				DispDot(x+i,j,(*s&mask)?FrontColor:BackColor);
				DispDot(x+8+i,j,(s[1]&mask)?FrontColor:BackColor);
				mask=(mask>>1);
			}
			s+=2;
		}
		return 16;
	}
	else
	{
		if(8+x>=LCD_WIDTH)return 0;
		s=GetFont8x16((unsigned char)CharCode);
		for(j=y;j<y+16;j++)
		{
			mask=0x80;
			for(i=0;i<8;i++)
			{
				DispDot(x+i,j,(*s&mask)?FrontColor:BackColor);
				mask=(mask>>1);
			} 
			s++;
		}
		return 8;
	}
}
void DispStr(short x,short y,unsigned char *s,unsigned char FrontColor,unsigned char BackColor)
{
	short i;
	while(*s&&*s!='\n'&&*s!='\r')
	{
		if((*s)&0x80)
		{
			i=DispChar(x,y,*((unsigned short*)s),FrontColor,BackColor);
			s+=2;
		}
		else
		{
			i=DispChar(x,y,(unsigned short)(*s),FrontColor,BackColor);
			s++;
		}
		if(!i)break;
		x+=i;
	}
}
short GetStrLength(unsigned char *s)
{
	short i;
	if(s==NULL)return 0;
	for(i=0;*s++;i++);
	return i;
}
short GetStrCharNum(unsigned char *s)
{
	short i;
	if(s==NULL)return 0;
	for(i=0;*s;i++)s+=(*s&0x80)?2:1;
	return i;
}
short GetStrWidth(short Margin,unsigned char *s)
{
	short w=0;
	if(s==NULL)return 0;
	while(*s)
	{
		if(*s&0x80){ w+=16; s+=2; }
		else { w+=8; s++; }
		w+=Margin;
	}
	return w;
}


/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---CURSOR结构定义----CURSOR---
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
typedef struct _CURSOR
{
	short x,y;	/*LCD	象素坐标*/
	short OnOff;	/*OnOff=1: ON, 0: OFF*/
	short ShowOrHide;/*光标是否显示在屏幕上*/
	short Width,Height;/*光标的宽度和高度*/
}CURSOR;
CURSOR Cursor;

/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---CURSOR function begin--------------------------------------------□
□                                                                    □
□---2000.8.4---------------------------------------------------------□
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
void ProcessCursor(void)
{
	DispReverse(Cursor.x,Cursor.y,Cursor.Width,Cursor.Height);
	Cursor.ShowOrHide=Cursor.ShowOrHide?0:1;
}
void SetCursorSize(short width,short height)
{
	short flag=Cursor.OnOff;
	if(flag)CursorOff();
	Cursor.Width=width;
	Cursor.Height=height;
	if(flag)CursorOn();
}
void CursorOn(void)
{
	if(!Cursor.OnOff)
	{
		Cursor.OnOff=1;
		Cursor.ShowOrHide=0;
		ProcessCursor();
		PSDE_INT_SetTime1(500);
		PSDE_SetFuncTime1(ProcessCursor);
	}
}
void MoveCursor(short x,short y)
{
	short flag=Cursor.OnOff;
	if(flag)CursorOff();
	if(x+Cursor.Width>=LCD_WIDTH)x=LCD_WIDTH-Cursor.Width-1;
	if(y+Cursor.Height>=LCD_HIGH)y=LCD_HIGH-Cursor.Height-1;
	Cursor.x=x;
	Cursor.y=y;
	if(flag)CursorOn();
}
void CursorOff(void)
{
	if(Cursor.OnOff)
	{
		Cursor.OnOff=0;
		if(Cursor.ShowOrHide)ProcessCursor();
		PSDE_INT_KillTime1();
	}
}
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---CURSOR function end----------------------------------------------□
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/


/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---BUTTON function begin--------------------------------------------□
□                                                                    □
□---2000.8.8---------------------------------------------------------□
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/

void InitButton(BUTTON *b,PDARECT *pRc,short style)
{
	b->Rect=*pRc;
	b->Style=style;
	b->BackColor=COLOR_BACK;
}
void SetButtonStr(BUTTON *b,unsigned char *str,unsigned char c)
{
	short l;
	b->Style|=PBN_STRING;
	b->Str=str;
	b->StrColor=c;
	l=GetStrLength(str);
	b->StrX=(b->Rect.right-b->Rect.left-l*8)/2+b->Rect.left;
	b->StrY=(b->Rect.bottom-b->Rect.top-16)/2+b->Rect.top;
}
void SetButtonBmp(BUTTON *b,unsigned char *pBmp1,unsigned char *pBmp2)
{
	BMPHEAD *pBmphead;
	b->Style|=PBN_BMP;
	b->Bmp=pBmp1;
	pBmphead=(BMPHEAD *)pBmp1;
	b->StrX=(b->Rect.right-b->Rect.left+1-pBmphead->width)/2+b->Rect.left;
	b->StrY=(b->Rect.bottom-b->Rect.top+1-pBmphead->high)/2+b->Rect.top;
	if(pBmp2!=NULL)
	{
		b->Style|=PBN_TWOBMP;
		b->Str=pBmp2;
		pBmphead=(BMPHEAD *)pBmp2;
		if(pBmphead->gray!=4)
		{
			b->BmpX=b->StrX;
			b->BmpY=b->StrY-8;
			SetButtonStr(b,pBmp2,COLOR_GRAY);
			b->Style&=~(PBN_BMP|PBN_TWOBMP|PBN_STRING);
			b->Style|=(PBN_ICON|PBN_NOFRAME);
			pBmphead=(BMPHEAD *)pBmp1;
			b->StrY=b->Rect.bottom-17;
		}
	}
}
void DrawButtonFrame(BUTTON *b,short f)
{
	short w,h;
	PDARECT *rc=&b->Rect;
	w=rc->right-rc->left+1;
	h=rc->bottom-rc->top+1;
	if(f)
	{
		DrawLineX(rc->left,rc->bottom-1,w-1,COLOR_BACK);
		DrawLineY(rc->right-1,rc->top,h-1,COLOR_BACK);
		DrawLineX(rc->left,rc->bottom,w,COLOR_WHITE);
		DrawLineY(rc->right,rc->top,h,COLOR_WHITE);

		DrawLineX(rc->left,rc->top,w,COLOR_GRAY);
		DrawLineY(rc->left,rc->top,h,COLOR_GRAY);
		DrawLineX(rc->left,rc->top+1,w-1,COLOR_LOWGRAY);
		DrawLineY(rc->left+1,rc->top,h-1,COLOR_LOWGRAY);
	}
	else
	{
		DrawLineX(rc->left,rc->top,w,COLOR_WHITE);
		DrawLineY(rc->left,rc->top,h,COLOR_WHITE);
		DrawLineX(rc->left+1,rc->top+1,w-1,COLOR_BACK);
		DrawLineY(rc->left+1,rc->top+1,h-1,COLOR_BACK);

		DrawLineX(rc->left+1,rc->bottom-1,w-1,COLOR_LOWGRAY);
		DrawLineY(rc->right-1,rc->top+1,h-1,COLOR_LOWGRAY);
		DrawLineX(rc->left,rc->bottom,w,COLOR_GRAY);
		DrawLineY(rc->right,rc->top,h,COLOR_GRAY);
	}
}
void DrawButton(BUTTON *b,short i)
{
	short x,y,s=b->Style;
	if(s&PBN_ICON)
	{
		if(i)
		{
			DispBmpGray(b->BmpX,b->BmpY,b->Bmp);
		}
		else DispBmp(b->BmpX,b->BmpY,b->Bmp);
		DispStr(b->StrX,b->StrY,b->Str,i?COLOR_BLACK:COLOR_HIGHGRAY,i?COLOR_BACK:COLOR_WHITE);
	}
	else
	{
		DrawBar(&b->Rect,b->BackColor);
		x=b->StrX;y=b->StrY;
		if(i)
		{
			x++;
			y++;
			if(s&PBN_TWOBMP)DispBmp(x,y,b->Str);
		}
		if((s&PBN_BMP)||((s&PBN_TWOBMP)&&!i))
		{
			DispBmp(x,y,b->Bmp);
		}
		if(s&PBN_STRING)
		{
			DispStr(x,y,b->Str,b->StrColor,COLOR_TRANS);
		}
		if(!(s&PBN_NOFRAME))
		{
			if(s&PBN_REVERSE)DrawRect(&b->Rect,COLOR_HIGHGRAY);
			else DrawButtonFrame(b,i);
		}
	}
}
short GetNullButton(BUTTON *b,PDAMSG *pMsg,void *func(BUTTON *b,short i))
{
	char press=0;
	if(!(pMsg->type==MSG_LCD&&CheckPointInRect(pMsg->x,pMsg->y,&b->Rect)))return 0;
	while(pMsg->type==MSG_LCD)
	{
		if(pMsg->PenStatus)
		{
			if(CheckPointInRect(pMsg->x,pMsg->y,&b->Rect))
			{
				if(!press)
				{
					press=1;
					if(func!=NULL)func(b,1);
				}
			}
			else
			{
				if(press)
				{
					press=0;
					if(func!=NULL)func(b,0);
				}
			}
		}
		else
		{
			pMsg->type=0;
			if(press)if(func!=NULL)func(b,0);
			if(CheckPointInRect(pMsg->x,pMsg->y,&b->Rect))return 1;
			else return 0;
		}
		GetMsg(pMsg);
		TranslateMsg(pMsg);
	}
	if(press)if(func!=NULL)func(b,0);
	return 0;
}
short GetButton(BUTTON *b,PDAMSG *pMsg)
{
	return GetNullButton(b,pMsg,(void *)DrawButton);
}
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---BUTTON function end----------------------------------------------□
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/

⌨️ 快捷键说明

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