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