Files
player/Project/Src/MyWinApp/mywin_user_stat.c

133 lines
2.7 KiB
C
Raw Normal View History

2025-06-27 00:32:57 +08:00
#include "mywin_inc.h"
#include "mywin_user_stat.h"
#define WIN_STAT_TYPE "WIN_StatStruct"
WIN_StatStruct *WIN_CreatStat (WIN_WindowStruct *base,
void (*msgLoop)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg),
int x,int y,int x_size,int y_size)
{
//重设消息循环
if (msgLoop==0)
{
msgLoop=(void (*)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg))STAT_DefaultMsgLoop;
}
WIN_StatStruct *ret=mymalloc (sizeof ( WIN_StatStruct));
//调用父类的构造函数
if (ret)
{
mymemset (ret,0,sizeof ( WIN_StatStruct));
if (0==WIN_CreatWindowExt((WIN_WindowStruct *)ret,base,msgLoop,x,y,x_size,y_size))
{
//创建失败
myfree (ret);
ret=0;
}
else
{
((WIN_WindowStruct *)ret)->winType=WIN_STAT_TYPE;
((WIN_WindowStruct *)ret)->keyShield=1;//屏蔽按键和触摸消息
((WIN_WindowStruct *)ret)->bkcolor=0x000000;
((WIN_WindowStruct *)ret)->color=0xffffff;
//构造一个
WIN_SetAsTopWin ((WIN_WindowStruct *)ret);//窗口置顶
}
}
return ret;
}
//设置显示文字成功返回1
int STAT_SetTxt (WIN_StatStruct *stat,char *txt)
{
int ret=0;
int len=strlen(txt);
if (len>=STAT_TXT_MAXLEN)
{
ret=0;
len=STAT_TXT_MAXLEN-1;
mymemcpy (stat->txt,txt,len);
stat->txt[len]=0;
}
else
{
ret=1;
mymemcpy (stat->txt,txt,len+1);
}
return ret;
}
//设置图标
int STAT_SetImg (WIN_StatStruct *stat,u8 *img)
{
stat->img=img;
return 1;
}
//默认绘制函数
void STAT_DefaultPaint (WIN_StatStruct *stat)
{
int x=0;
int y=0;
int x_size=((WIN_WindowStruct *)stat)->x_size;
int y_size=((WIN_WindowStruct *)stat)->y_size;
WIN_PaintBackGround ((WIN_WindowStruct *)stat);
int img_xsize=0; //图标横向尺寸
int img_ysize=0; //图标纵向尺寸
int img_x=x_size-1; //图标起点
int img_y=0; //图标起点
int font_size=WIN_SetFontSize(12);
WIN_SetLcdColor (((WIN_WindowStruct *)stat)->color);
if (stat->img)
{
WIN_GetImageSize (stat->img,&img_xsize,&img_ysize);
if (img_xsize>x_size) img_xsize=x_size;
if (img_ysize>y_size) img_ysize=y_size;
img_x=x_size/2-img_xsize/2;
img_y=y_size/2-img_ysize/2;
//开启状态,显示彩色
if (1)
{WIN_DrawImag (img_x,img_y, img_xsize,img_ysize,stat->img);}
}
else if (stat->txt[0])
{
WIN_DrawTxtHCenterAt (stat->txt,x_size/2,y_size/2-WIN_GetFontHight()/2);
}
WIN_SetFontSize (font_size);
}
//默认消息处理函数
void STAT_DefaultMsgLoop (WIN_StatStruct *stat,WIN_MsgStruct *msg)
{
WIN_MoveStruct *m=0;
WIN_TouchStruct *t=0;
switch (msg->msg)
{
case WIN_MSG_PAINT:
STAT_DefaultPaint(stat);
break;
case WIN_MSG_TIMER:
if (stat->TimerCallBack)
stat->TimerCallBack(stat);
break;
default:
WIN_DefaultMsgLoop((WIN_WindowStruct *)stat,msg);
break;
}
}