Files
player/Project/Src/MyWinApp/mywin_user_stat.c
2025-07-05 19:47:28 +08:00

133 lines
2.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}
}