Files
player/Project/Src/MyWinApp/mywin_user_menu.c
andy d45df9714a 整理代码
1.解决一些编译警告
2.整理一些文件格式
2025-10-18 01:02:27 +08:00

171 lines
4.6 KiB
C

#include "mywin_user_menu.h"
#define WIN_MENU_TYPE "WIN_MenuStruct"
WIN_MenuStruct *WIN_CreatMenu(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))MENU_DefaultMsgLoop;
}
WIN_MenuStruct *ret = mymalloc(sizeof(WIN_MenuStruct));
// 调用父类的构造函数
if (ret) {
mymemset(ret, 0, sizeof(WIN_MenuStruct));
if (0 == WIN_CreatTouchEx((WIN_TouchWinStruct *)ret, base, msgLoop, x, y,
x_size, y_size)) {
// 创建失败
myfree(ret);
ret = 0;
} else {
((WIN_WindowStruct *)ret)->winType = WIN_MENU_TYPE;
((WIN_WindowStruct *)ret)->color = 0xaabbcc;
ret->bar = WIN_CreatScrollbar((WIN_WindowStruct *)ret, 0, 20, 45,
x_size - 40, y_size - 90);
}
}
return ret;
}
// 设置标题
void MENU_SetTitle(WIN_MenuStruct *menu, char *img, char *txt) {
menu->title.img = img;
mymemcpy(menu->title.txt, txt, strlen(txt) + 1);
}
void MENU_SetMaxItem(WIN_MenuStruct *menu, int itemNum) {
SCROLLBAR_SetItemNum(menu->bar, itemNum);
}
// 设置条目
void MENU_AddItem(WIN_MenuStruct *menu, char *img, char *txt) {
SCROLLBAR_AddItem(menu->bar, txt, img);
}
int MENU_GetAllItemNum(WIN_MenuStruct *menu) { return menu->bar->itemNum; }
char *MENU_GetItem(WIN_MenuStruct *menu, int index) {
if (index >= 0 && index < menu->bar->itemNum)
return menu->bar->items[index].txt;
else
return 0;
}
char *MENU_GetSelectItem(WIN_MenuStruct *menu) {
return MENU_GetItem(menu, menu->bar->index);
}
int MENU_GetIndex(WIN_MenuStruct *menu) { return menu->bar->index; }
// 显示一个item结构体,靠左显示
void MENU_PaintItem(MENU_ItemStruct *item, int x, int y, int x_size,
int y_size) {
int txt_xsize = WIN_GetFontWidth() * strlen(item->txt) / 2;
int img_xsize = 0; // 图标横向尺寸
int img_ysize = 0; // 图标纵向尺寸
int img_x = 0; // 图标起点
int img_y = 0; // 图标起点
if (item->img) {
WIN_PicStruct *pic = WIN_GetPic(item->img);
WIN_DrawPic(pic, x, y + (y_size - pic->ysize) / 2, pic->xsize, pic->ysize);
img_xsize += pic->xsize + WIN_GetFontWidth() / 2;
}
int txt_x = x + img_xsize;
if (item->txt[0]) {
WIN_DrawTxtAt(item->txt, txt_x, y + y_size / 2 - WIN_GetFontHight() / 2);
}
}
// 默认绘制函数
void MENU_DefaultPaint(WIN_MenuStruct *menu) {
int x = 0;
int y = 0;
int x_size = ((WIN_WindowStruct *)menu)->x_size;
int y_size = ((WIN_WindowStruct *)menu)->y_size;
WIN_PaintBackGround((WIN_WindowStruct *)menu);
// 绘制标题
WIN_SetLcdColor(((WIN_WindowStruct *)menu)->color);
MENU_PaintItem(&menu->title, x + 25, y, x_size / 2, 40);
}
// 默认消息处理函数
void MENU_DefaultMsgLoop(WIN_MenuStruct *menu, WIN_MsgStruct *msg) {
WIN_MoveStruct *m = 0;
WIN_KeyStruct *k = 0;
switch (msg->msg) {
case WIN_MSG_PAINT:
MENU_DefaultPaint(menu);
break;
case WIN_MSG_INIT: {
int x_size = ((WIN_WindowStruct *)menu)->x_size;
int y_size = ((WIN_WindowStruct *)menu)->y_size;
menu->key_back = WIN_CreatButton(((WIN_WindowStruct *)menu), 0, x_size - 65,
y_size - 30, 65, 30);
BUTTON_SetKeyString(menu->key_back, "返回");
} break;
case WIN_MSG_KEY:
k = msg->data.p;
if (k->shortPress & KEY_VALUE_UP) // 短按
{
// MENU_IndexSub (menu);
} else if (k->shortPress & KEY_VALUE_DOWN) {
// MENU_IndexAdd (menu);
}
if (k->shortPress & KEY_VALUE_HOME) {
// 返回
((WIN_WindowStruct *)menu)->deleteWindow((WIN_WindowStruct *)menu);
break;
}
if (k->shortPress) {
WIN_SetInvalid((WIN_WindowStruct *)menu);
}
break; // case WIN_MSG_KEY:
case WIN_MSG_MOVE:
m = msg->data.p;
switch (m->moveType) {
case MOVE_DATA_MOVED: {
} break;
case MOVE_DATA_TOUCHIN:
break;
case MOVE_DATA_TOUCHOUT:
break;
default:
break;
}
break;
case WIN_MSG_CHID:
switch (msg->data.v) {
case CHID_DELETE:
break;
case CHID_USER: {
if (msg->srcWin == menu->key_back) {
if (msg->data2.v == BUTTON_PRESSED) {
// 返回
((WIN_WindowStruct *)menu)->deleteWindow((WIN_WindowStruct *)menu);
}
} else {
}
} break;
default:
break;
}
break;
default:
WIN_DefaultMsgLoop((WIN_WindowStruct *)menu, msg);
break;
}
}