#include "mywin_inc.h" #define WIN_INPUTBOX_TYPE "WIN_InputboxStruct" WIN_InputboxStruct *WIN_CreatInputbox (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))INPUTBOX_DefaultMsgLoop; } WIN_InputboxStruct *ret=mymalloc (sizeof ( WIN_InputboxStruct)); //调用父类的构造函数 if (ret) { mymemset (ret,0,sizeof ( WIN_InputboxStruct)); 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_INPUTBOX_TYPE; ((WIN_WindowStruct *)ret)->bkcolor=0x342f2a; ((WIN_WindowStruct *)ret)->color=0xc2ae9b; ((WIN_WindowStruct *)ret)->keyChid=1; //作为子窗口被创建 ret->color_light=0xffffff; ret->color_dark=0x808080; } } return ret; } int INPUTBOX_Clear(WIN_InputboxStruct *box) { mymemset(box->inputs,0,INPUTBOX_MAX_CHAR_NUM); WIN_SetInvalid ((WIN_WindowStruct *)box); return 0; } int INPUTBOX_SetChars(WIN_InputboxStruct *box,char *str) { int len=strlen(str)+1; if (len>INPUTBOX_MAX_CHAR_NUM) return -1; mymemcpy(box->inputs,str,len); WIN_SetInvalid ((WIN_WindowStruct *)box); return 0; } void INPUTBOX_DefaultPaint (WIN_InputboxStruct *box) { int x=0; int y=0; int x_size=((WIN_WindowStruct *)box)->x_size; int y_size=((WIN_WindowStruct *)box)->y_size; WIN_PaintBackGround ((WIN_WindowStruct *)box); WIN_SetLcdColor (((WIN_WindowStruct *)box)->color); WIN_DrawTxtAtRect(box->inputs,x+1,y+1,x_size-2,y_size-2); //绘制边框 if (box->press) WIN_SetLcdColor (box->color_light); else WIN_SetLcdColor (box->color_dark); WIN_DrawRect (0,0,((WIN_WindowStruct *)box)->x_size,((WIN_WindowStruct *)box)->y_size); } void INPUTBOX_DefaultMsgLoop (WIN_InputboxStruct *box,WIN_MsgStruct *msg) { WIN_MoveStruct *m=0; WIN_KeyStruct *k=0; switch (msg->msg) { case WIN_MSG_PAINT: INPUTBOX_DefaultPaint(box); break; case WIN_MSG_KEY: k=msg->data.p; if (k->shortPress& KEY_VALUE_DOWN) { } else if (k->shortPress&KEY_VALUE_UP) { } break; case WIN_MSG_MOVE: m=msg->data.p; switch (m->moveType) { case MOVE_DATA_TOUCHIN: box->press=1; WIN_SetInvalid ((WIN_WindowStruct *)box); break; case MOVE_DATA_TOUCHOUT: if (box->press) { box->press=0; //打开输入法 INPUT_KeyBoard(((WIN_WindowStruct *)box)->baseWin,box->inputs,INPUTBOX_MAX_CHAR_NUM); WIN_SetInvalid ((WIN_WindowStruct *)box); } break; case MOVE_DATA_MOVEOUT: box->press=0; WIN_SetInvalid ((WIN_WindowStruct *)box); default: break; } break; default: WIN_DefaultMsgLoop((WIN_WindowStruct *)box,msg); break; } } WIN_InputboxStruct *INPUTBOX_InputChars (WIN_WindowStruct *base,int x,int y,int x_size,int y_size) { WIN_InputboxStruct *box=WIN_CreatInputbox(base,0,x,y,x_size,y_size); //设置弹出框的背景 WIN_SetBackPic ((WIN_WindowStruct *)box); WIN_ShowWindow((WIN_WindowStruct *)box); return box; }