#include "mywin_user_stat.h" #include "mywin_inc.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, uint8_t *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; } }