573 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			573 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "mywin_inc.h"
 | 
						||
 | 
						||
 | 
						||
 | 
						||
//消息对话框,继承自MYWIN框架
 | 
						||
 | 
						||
//定义消息对话框类型
 | 
						||
#define WIN_MSGBOX_TYPE "WIN_MsgboxStruct"
 | 
						||
 | 
						||
 | 
						||
//在堆中创建一个消息对话框,
 | 
						||
WIN_MsgboxStruct *WIN_CreatMsgbox (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))MSGBOX_defaultMsgLoop; 
 | 
						||
	}
 | 
						||
	
 | 
						||
	WIN_MsgboxStruct *ret=mymalloc (sizeof ( WIN_MsgboxStruct));
 | 
						||
	//调用父类的构造函数
 | 
						||
	if (ret)
 | 
						||
	{
 | 
						||
		mymemset (ret,0,sizeof ( WIN_MsgboxStruct));
 | 
						||
		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_MSGBOX_TYPE;
 | 
						||
			((WIN_WindowStruct *)ret)->intercept=1;//作为子窗口,接管按键消息
 | 
						||
			((WIN_WindowStruct *)ret)->color=0xffffff;
 | 
						||
		//构造一个消息框
 | 
						||
			ret->key="确定";
 | 
						||
			ret->msg="这是默认提示消息";
 | 
						||
			ret->title="提示";
 | 
						||
			ret->titleTxtColor=0xc2ae9b;
 | 
						||
			ret->titleRectColor=0;
 | 
						||
			ret->tipRectColor=0x342f2a;
 | 
						||
			ret->butRectColor=0x221f18;
 | 
						||
			ret->y_step=30;
 | 
						||
		}
 | 
						||
	}
 | 
						||
	
 | 
						||
	
 | 
						||
	return ret;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
//创建消息框,根据消息内容自动确定尺寸
 | 
						||
WIN_MsgboxStruct *WIN_CreatMsgboxAuto (WIN_WindowStruct *base,
 | 
						||
			void (*msgLoop)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg),char *msg)
 | 
						||
{
 | 
						||
	int x,y;
 | 
						||
	int txt_xsize=0;int txt_ysize=0;
 | 
						||
	WIN_GetTxtRectSize (msg,&txt_xsize,&txt_ysize);
 | 
						||
	txt_xsize+=4+WIN_GetFontWidth();txt_ysize+=4+WIN_GetFontHight()*5;
 | 
						||
	if (base)
 | 
						||
	{
 | 
						||
		if (txt_xsize>base->x_size) txt_xsize=base->x_size;
 | 
						||
		txt_ysize+=(txt_xsize/base->x_size)*WIN_GetFontHight();//单行超过屏幕大小时,最多允许单个行超过屏幕大小
 | 
						||
		if (txt_ysize>base->y_size) txt_ysize=base->y_size;
 | 
						||
		x=(base->x_size-txt_xsize)/2;y=(base->y_size-txt_ysize)/2;
 | 
						||
	}
 | 
						||
	else
 | 
						||
	{
 | 
						||
		if (txt_xsize>WIN_GetBaseWindow()->x_size) txt_xsize=WIN_GetBaseWindow()->x_size;
 | 
						||
		txt_ysize+=(txt_xsize/WIN_GetBaseWindow()->x_size)*WIN_GetFontHight();//单行超过屏幕大小时,最多允许单个行超过屏幕大小
 | 
						||
		if (txt_ysize>WIN_GetBaseWindow()->y_size) txt_ysize=WIN_GetBaseWindow()->y_size;
 | 
						||
		x=(WIN_GetBaseWindow()->x_size-txt_xsize)/2;y=(WIN_GetBaseWindow()->y_size-txt_ysize)/2;
 | 
						||
	}
 | 
						||
	WIN_MsgboxStruct *msgbox=WIN_CreatMsgbox (base,msgLoop,x,y,txt_xsize,txt_ysize);
 | 
						||
	
 | 
						||
	//设置背景
 | 
						||
	WIN_SetBackPic ((WIN_WindowStruct *)msgbox);
 | 
						||
	return msgbox;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
//消息对话框设置标题
 | 
						||
void MSGBOX_SetTitle (WIN_MsgboxStruct *msgbox,char *title)
 | 
						||
{
 | 
						||
	msgbox->title=title;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
//消息对话框设置内容
 | 
						||
void MSGBOX_SetMsg (WIN_MsgboxStruct *msgbox,char *msg)
 | 
						||
{
 | 
						||
	msgbox->msg=msg;
 | 
						||
}
 | 
						||
 | 
						||
//消息对话框设置按键
 | 
						||
void MSGBOX_SetKey (WIN_MsgboxStruct *msgbox,char *key)
 | 
						||
{
 | 
						||
	msgbox->key=key;
 | 
						||
}
 | 
						||
 | 
						||
void MSGBOX_SetKey2 (WIN_MsgboxStruct *msgbox,char *key)
 | 
						||
{
 | 
						||
	msgbox->key2=key;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
//添加条目
 | 
						||
void MSGBOX_AddItem (WIN_MsgboxStruct *msgbox,char *item)
 | 
						||
{
 | 
						||
	if (msgbox->itemNum<POPUP_ITEM_MAXNUM)
 | 
						||
	{
 | 
						||
		mymemcpy ( msgbox->items[msgbox->itemNum],item,strlen(item)+1);
 | 
						||
		msgbox->itemNum++;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
//消息框的绘制函数
 | 
						||
void MSGBOX_DefaultPaint (WIN_MsgboxStruct *msgbox)
 | 
						||
{
 | 
						||
	int x=0;
 | 
						||
	int y=0;
 | 
						||
	int x_size=((WIN_WindowStruct *)msgbox)->x_size;
 | 
						||
	int y_size=WIN_GetFontHight()*2;
 | 
						||
	
 | 
						||
	WIN_PaintBackGround ((WIN_WindowStruct *)msgbox);
 | 
						||
	
 | 
						||
	WIN_SetFontMode(WIN_DRAWMODE_ALONE);
 | 
						||
	//绘制标题
 | 
						||
	WIN_SetLcdColor(msgbox->titleRectColor);
 | 
						||
	WIN_FillRectByColorAlpha(x,y,x_size,y_size,16);
 | 
						||
	WIN_SetLcdColor(msgbox->titleTxtColor);
 | 
						||
	WIN_DrawTxtHCenterAt (msgbox->title,x_size/2,y+y_size/2-WIN_GetFontHight()/2);
 | 
						||
	
 | 
						||
	//绘制提示
 | 
						||
	y=y+y_size;y_size=((WIN_WindowStruct *)msgbox)->y_size-y_size-WIN_GetFontHight()*2;
 | 
						||
	WIN_SetLcdColor(msgbox->tipRectColor);
 | 
						||
	WIN_FillRectByColorAlpha (x,y,x_size,y_size,16);
 | 
						||
	WIN_SetLcdColor(((WIN_WindowStruct *)msgbox)->color);
 | 
						||
	//WIN_DrawTxtHCenterAt (msgbox->msg,LCD_GetWindowSizeX()/2,y+y_size/2-WIN_GetFontHight()/2);
 | 
						||
	WIN_DrawTxtCenterAtRect (msgbox->msg,x,y,x_size,y_size);
 | 
						||
 | 
						||
	//绘制按钮
 | 
						||
	y+=y_size;y_size=WIN_GetFontHight()*2;
 | 
						||
	if (msgbox->press==1)
 | 
						||
	{
 | 
						||
		WIN_SetLcdColor(msgbox->tipRectColor);
 | 
						||
	}
 | 
						||
	else
 | 
						||
	{
 | 
						||
		WIN_SetLcdColor(msgbox->butRectColor);
 | 
						||
	}
 | 
						||
	WIN_FillRectByColorAlpha (x,y,x_size,y_size,16);
 | 
						||
	WIN_SetLcdColor(((WIN_WindowStruct *)msgbox)->color);
 | 
						||
	if ((msgbox->key)&&(msgbox->key2==0))
 | 
						||
	{	WIN_DrawTxtHCenterAt (msgbox->key,((WIN_WindowStruct *)msgbox)->x_size/2,y+y_size/2-WIN_GetFontHight()/2);}
 | 
						||
	else
 | 
						||
	{
 | 
						||
		WIN_DrawTxtHCenterAt (msgbox->key,((WIN_WindowStruct *)msgbox)->x_size/4,y+y_size/2-WIN_GetFontHight()/2);
 | 
						||
		WIN_DrawTxtHCenterAt (msgbox->key2,((WIN_WindowStruct *)msgbox)->x_size*3/4,y+y_size/2-WIN_GetFontHight()/2);
 | 
						||
	}
 | 
						||
 | 
						||
	//绘制边框
 | 
						||
	WIN_SetLcdColor (((WIN_WindowStruct *)msgbox)->bkcolor);
 | 
						||
	WIN_DrawRect (0,0,((WIN_WindowStruct *)msgbox)->x_size,((WIN_WindowStruct *)msgbox)->y_size);
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
//消息框选择时的绘制函数
 | 
						||
void MSGBOX_SelectPaint (WIN_MsgboxStruct *msgbox)
 | 
						||
{
 | 
						||
	int x=0;
 | 
						||
	int y=0;
 | 
						||
	int x_size=((WIN_WindowStruct *)msgbox)->x_size;
 | 
						||
	int y_size=WIN_GetFontHight()*2;
 | 
						||
	
 | 
						||
	WIN_PaintBackGround ((WIN_WindowStruct *)msgbox);
 | 
						||
	
 | 
						||
	WIN_SetFontMode(WIN_DRAWMODE_ALONE);
 | 
						||
	//绘制标题
 | 
						||
	WIN_SetLcdColor(msgbox->titleRectColor);
 | 
						||
	WIN_FillRectByColorAlpha(x,y,x_size,y_size,16);
 | 
						||
	WIN_SetLcdColor(msgbox->titleTxtColor);
 | 
						||
	WIN_DrawTxtHCenterAt (msgbox->title,x_size/2,y+y_size/2-WIN_GetFontHight()/2);
 | 
						||
	
 | 
						||
	//绘制提示
 | 
						||
	y=y+y_size;y_size=((WIN_WindowStruct *)msgbox)->y_size-y_size-WIN_GetFontHight()*2;
 | 
						||
	//绘制半透明背景
 | 
						||
	WIN_SetLcdColor(msgbox->tipRectColor);
 | 
						||
	WIN_FillRectByColorAlpha (x,y,x_size,y_size,16);
 | 
						||
	//绘制选中框
 | 
						||
	WIN_SetLcdColor(0xa100a1);
 | 
						||
	WIN_FillRectByColorAlpha (x,y+msgbox->index*msgbox->y_step,x_size,msgbox->y_step,16);
 | 
						||
	//绘制字体
 | 
						||
	WIN_SetLcdColor(((WIN_WindowStruct *)msgbox)->color);
 | 
						||
	for (int i=0;i<msgbox->itemNum;i++)
 | 
						||
	{
 | 
						||
		WIN_DrawTxtHCenterAt (msgbox->items[i],x+x_size/2,y+i*msgbox->y_step+msgbox->y_step/2-WIN_GetFontHight()/2);
 | 
						||
	}
 | 
						||
 | 
						||
	//绘制按钮
 | 
						||
	y+=y_size;y_size=WIN_GetFontHight()*2;
 | 
						||
	if (msgbox->press==1)
 | 
						||
	{
 | 
						||
		WIN_SetLcdColor(msgbox->tipRectColor);
 | 
						||
	}
 | 
						||
	else
 | 
						||
	{
 | 
						||
		WIN_SetLcdColor(msgbox->butRectColor);
 | 
						||
	}
 | 
						||
	WIN_FillRectByColorAlpha (x,y,x_size,y_size,16);
 | 
						||
	WIN_SetLcdColor(((WIN_WindowStruct *)msgbox)->color);
 | 
						||
	if ((msgbox->key)&&(msgbox->key2==0))
 | 
						||
	{	WIN_DrawTxtHCenterAt (msgbox->key,((WIN_WindowStruct *)msgbox)->x_size/2,y+y_size/2-WIN_GetFontHight()/2);}
 | 
						||
	else
 | 
						||
	{
 | 
						||
		WIN_DrawTxtHCenterAt (msgbox->key,((WIN_WindowStruct *)msgbox)->x_size/4,y+y_size/2-WIN_GetFontHight()/2);
 | 
						||
		WIN_DrawTxtHCenterAt (msgbox->key2,((WIN_WindowStruct *)msgbox)->x_size*3/4,y+y_size/2-WIN_GetFontHight()/2);
 | 
						||
	}
 | 
						||
 | 
						||
	//绘制边框
 | 
						||
	WIN_SetLcdColor (((WIN_WindowStruct *)msgbox)->bkcolor);
 | 
						||
	WIN_DrawRect (0,0,((WIN_WindowStruct *)msgbox)->x_size,((WIN_WindowStruct *)msgbox)->y_size);
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
//消息框的消息处理函数
 | 
						||
void MSGBOX_defaultMsgLoop (WIN_MsgboxStruct *msgbox,WIN_MsgStruct *msg)
 | 
						||
{
 | 
						||
	WIN_MoveStruct *m=0;
 | 
						||
	WIN_KeyStruct *k=0;
 | 
						||
	switch (msg->msg)
 | 
						||
	{	
 | 
						||
		case WIN_MSG_PAINT:
 | 
						||
			MSGBOX_DefaultPaint(msgbox);
 | 
						||
		break;
 | 
						||
		case WIN_MSG_INIT:
 | 
						||
		break;
 | 
						||
		case WIN_MSG_KEY:
 | 
						||
			k=msg->data.p;
 | 
						||
			//收到确定或返回键
 | 
						||
			if ((k->shortPress&KEY_VALUE_ENTER)||(k->shortPress&KEY_VALUE_HOME))
 | 
						||
			{
 | 
						||
				if (k->shortPress&KEY_VALUE_ENTER)
 | 
						||
				{
 | 
						||
					WIN_SetBlockWinReturn(0,0,0);
 | 
						||
				}
 | 
						||
				else if (k->shortPress&KEY_VALUE_HOME)
 | 
						||
				{
 | 
						||
					WIN_SetBlockWinReturn(1,0,0);
 | 
						||
				}
 | 
						||
				((WIN_WindowStruct *)msgbox)->deleteWindow((WIN_WindowStruct *)msgbox);
 | 
						||
			}
 | 
						||
			else if ((k->firstPress&KEY_VALUE_ENTER)||(k->firstPress&KEY_VALUE_HOME))
 | 
						||
			{
 | 
						||
				msgbox->press=1;
 | 
						||
				WIN_SetInvalidRect ((WIN_WindowStruct *)msgbox,0,((WIN_WindowStruct *)msgbox)->y_size-WIN_GetFontHight()*2,((WIN_WindowStruct *)msgbox)->x_size,WIN_GetFontHight()*2);
 | 
						||
			}
 | 
						||
			else if ((k->unPress&KEY_VALUE_ENTER)||(k->unPress&KEY_VALUE_HOME))
 | 
						||
			{
 | 
						||
				msgbox->press=0;
 | 
						||
				WIN_SetInvalidRect ((WIN_WindowStruct *)msgbox,0,((WIN_WindowStruct *)msgbox)->y_size-WIN_GetFontHight()*2,((WIN_WindowStruct *)msgbox)->x_size,WIN_GetFontHight()*2);
 | 
						||
			}
 | 
						||
		break;
 | 
						||
		case WIN_MSG_TOUCH:
 | 
						||
		break;
 | 
						||
		case WIN_MSG_CHID:
 | 
						||
		break;
 | 
						||
		case WIN_MSG_DELETE:
 | 
						||
		break;
 | 
						||
		case WIN_MSG_TIMER:
 | 
						||
			//定时器时间到
 | 
						||
			((WIN_WindowStruct *)msgbox)->deleteWindow((WIN_WindowStruct *)msgbox);
 | 
						||
		break;
 | 
						||
		case WIN_MSG_MOVE:
 | 
						||
			m=msg->data.p;
 | 
						||
			switch (m->moveType)
 | 
						||
			{
 | 
						||
				case MOVE_DATA_MOVEIN:
 | 
						||
					break;
 | 
						||
				case MOVE_DATA_MOVED:
 | 
						||
					break;
 | 
						||
				case MOVE_DATA_LONG:
 | 
						||
					break;
 | 
						||
				case MOVE_DATA_MOVEOUT:
 | 
						||
				case MOVE_DATA_OUTSIDE:
 | 
						||
					msgbox->press=0;
 | 
						||
					WIN_SetInvalidRect ((WIN_WindowStruct *)msgbox,0,((WIN_WindowStruct *)msgbox)->y_size-WIN_GetFontHight()*2,((WIN_WindowStruct *)msgbox)->x_size,WIN_GetFontHight()*2);
 | 
						||
					break;
 | 
						||
				case MOVE_DATA_TOUCHOUT:
 | 
						||
					if (msgbox->press) 
 | 
						||
					{
 | 
						||
						int x_size=((WIN_WindowStruct *)msgbox)->x_size;
 | 
						||
						if (m->x_move<x_size/2)
 | 
						||
						{
 | 
						||
							//返回确定
 | 
						||
							WIN_SetBlockWinReturn(msgbox->index,0,0);
 | 
						||
						}
 | 
						||
						else
 | 
						||
						{
 | 
						||
							//返回取消
 | 
						||
							WIN_SetBlockWinReturn(-1,0,0);
 | 
						||
						}
 | 
						||
						((WIN_WindowStruct *)msgbox)->deleteWindow((WIN_WindowStruct *)msgbox);
 | 
						||
					}
 | 
						||
					break;
 | 
						||
				case MOVE_DATA_TOUCHIN:
 | 
						||
					msgbox->press=1;
 | 
						||
					WIN_SetInvalidRect ((WIN_WindowStruct *)msgbox,0,((WIN_WindowStruct *)msgbox)->y_size-WIN_GetFontHight()*2,((WIN_WindowStruct *)msgbox)->x_size,WIN_GetFontHight()*2);
 | 
						||
					break;
 | 
						||
				default:
 | 
						||
					WIN_DefaultMsgLoop((WIN_WindowStruct *)msgbox,msg);
 | 
						||
					break;
 | 
						||
			}
 | 
						||
			break;
 | 
						||
		default:
 | 
						||
			WIN_DefaultMsgLoop((WIN_WindowStruct *)msgbox,msg);
 | 
						||
		break;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
//消息框选择时的消息处理函数
 | 
						||
void MSGBOX_SelectMsgLoop (WIN_MsgboxStruct *msgbox,WIN_MsgStruct *msg)
 | 
						||
{
 | 
						||
	WIN_MoveStruct *m=0;
 | 
						||
	WIN_KeyStruct *k=0;
 | 
						||
	switch (msg->msg)
 | 
						||
	{	
 | 
						||
		case WIN_MSG_PAINT:
 | 
						||
			MSGBOX_SelectPaint(msgbox);
 | 
						||
		break;
 | 
						||
		case WIN_MSG_INIT:
 | 
						||
		break;
 | 
						||
		case WIN_MSG_KEY:
 | 
						||
			k=msg->data.p;
 | 
						||
			//选择条目
 | 
						||
			if (k->shortPress& KEY_VALUE_DOWN)
 | 
						||
			{
 | 
						||
				if (msgbox->index<msgbox->itemNum-1) msgbox->index++;
 | 
						||
				else msgbox->index=0;
 | 
						||
				WIN_SetInvalid((WIN_WindowStruct *)msgbox);
 | 
						||
			}
 | 
						||
			else if (k->shortPress&KEY_VALUE_UP)
 | 
						||
			{
 | 
						||
				if (msgbox->index>0) msgbox->index--;
 | 
						||
				else msgbox->index=msgbox->itemNum-1;
 | 
						||
				WIN_SetInvalid((WIN_WindowStruct *)msgbox);
 | 
						||
			}
 | 
						||
			//收到确定或返回键
 | 
						||
			else if ((k->shortPress&KEY_VALUE_ENTER)||(k->shortPress&KEY_VALUE_HOME))
 | 
						||
			{
 | 
						||
				if (k->shortPress&KEY_VALUE_ENTER)
 | 
						||
				{
 | 
						||
					WIN_SetBlockWinReturn(msgbox->index,0,0);
 | 
						||
				}
 | 
						||
				else if (k->shortPress&KEY_VALUE_HOME)
 | 
						||
				{
 | 
						||
					WIN_SetBlockWinReturn(-1,0,0);
 | 
						||
				}
 | 
						||
				((WIN_WindowStruct *)msgbox)->deleteWindow((WIN_WindowStruct *)msgbox);
 | 
						||
			}
 | 
						||
			else if ((k->firstPress&KEY_VALUE_ENTER)||(k->firstPress&KEY_VALUE_HOME))
 | 
						||
			{
 | 
						||
				msgbox->press=1;
 | 
						||
				WIN_SetInvalidRect ((WIN_WindowStruct *)msgbox,0,((WIN_WindowStruct *)msgbox)->y_size-WIN_GetFontHight()*2,((WIN_WindowStruct *)msgbox)->x_size,WIN_GetFontHight()*2);
 | 
						||
			}
 | 
						||
			else if ((k->unPress&KEY_VALUE_ENTER)||(k->unPress&KEY_VALUE_HOME))
 | 
						||
			{
 | 
						||
				msgbox->press=0;
 | 
						||
				WIN_SetInvalidRect ((WIN_WindowStruct *)msgbox,0,((WIN_WindowStruct *)msgbox)->y_size-WIN_GetFontHight()*2,((WIN_WindowStruct *)msgbox)->x_size,WIN_GetFontHight()*2);
 | 
						||
			}
 | 
						||
		break;
 | 
						||
		case WIN_MSG_TOUCH:
 | 
						||
		break;
 | 
						||
		case WIN_MSG_CHID:
 | 
						||
		break;
 | 
						||
		case WIN_MSG_DELETE:
 | 
						||
		break;
 | 
						||
		case WIN_MSG_TIMER:
 | 
						||
			//定时器时间到
 | 
						||
			((WIN_WindowStruct *)msgbox)->deleteWindow((WIN_WindowStruct *)msgbox);
 | 
						||
		break;
 | 
						||
		case WIN_MSG_MOVE:
 | 
						||
			m=msg->data.p;
 | 
						||
			switch (m->moveType)
 | 
						||
			{
 | 
						||
				case MOVE_DATA_MOVEIN:
 | 
						||
					break;
 | 
						||
				case MOVE_DATA_MOVED:
 | 
						||
					break;
 | 
						||
				case MOVE_DATA_LONG:
 | 
						||
					break;
 | 
						||
				case MOVE_DATA_MOVEOUT:
 | 
						||
				case MOVE_DATA_OUTSIDE:
 | 
						||
					msgbox->press=0;
 | 
						||
					WIN_SetInvalidRect ((WIN_WindowStruct *)msgbox,0,((WIN_WindowStruct *)msgbox)->y_size-WIN_GetFontHight()*2,((WIN_WindowStruct *)msgbox)->x_size,WIN_GetFontHight()*2);
 | 
						||
					break;
 | 
						||
				case MOVE_DATA_TOUCHOUT:
 | 
						||
					if (msgbox->press) 
 | 
						||
					{
 | 
						||
						int y_start=WIN_GetFontHight()*2;
 | 
						||
						int y_end=((WIN_WindowStruct *)msgbox)->y_size-WIN_GetFontHight()*2;
 | 
						||
						
 | 
						||
						if(m->y_move>y_end)
 | 
						||
						{
 | 
						||
							int x_size=((WIN_WindowStruct *)msgbox)->x_size;
 | 
						||
							if (m->x_move<x_size/2)
 | 
						||
							{
 | 
						||
								//返回确定
 | 
						||
								WIN_SetBlockWinReturn(msgbox->index,0,0);
 | 
						||
							}
 | 
						||
							else
 | 
						||
							{
 | 
						||
								//返回取消
 | 
						||
								WIN_SetBlockWinReturn(-1,0,0);
 | 
						||
							}
 | 
						||
							((WIN_WindowStruct *)msgbox)->deleteWindow((WIN_WindowStruct *)msgbox);
 | 
						||
						}
 | 
						||
						else if(m->y_move>y_start)
 | 
						||
						{
 | 
						||
							msgbox->index=(m->y_move-y_start)/msgbox->y_step;
 | 
						||
							WIN_SetInvalid((WIN_WindowStruct *)msgbox);
 | 
						||
						}
 | 
						||
					}
 | 
						||
					break;
 | 
						||
				case MOVE_DATA_TOUCHIN:
 | 
						||
					msgbox->press=1;
 | 
						||
					WIN_SetInvalidRect ((WIN_WindowStruct *)msgbox,0,((WIN_WindowStruct *)msgbox)->y_size-WIN_GetFontHight()*2,((WIN_WindowStruct *)msgbox)->x_size,WIN_GetFontHight()*2);
 | 
						||
					break;
 | 
						||
				default:
 | 
						||
					WIN_DefaultMsgLoop((WIN_WindowStruct *)msgbox,msg);
 | 
						||
					break;
 | 
						||
			}
 | 
						||
			break;
 | 
						||
		default:
 | 
						||
			WIN_DefaultMsgLoop((WIN_WindowStruct *)msgbox,msg);
 | 
						||
		break;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
//弹出提示框
 | 
						||
int MSGBOX_Tips (WIN_WindowStruct *base,char *title,char *msg,char *key)
 | 
						||
{
 | 
						||
	WIN_MsgboxStruct *msgbox=WIN_CreatMsgboxAuto (base,0,msg);
 | 
						||
	if (title)
 | 
						||
		MSGBOX_SetTitle (msgbox,title);
 | 
						||
	if (msg)
 | 
						||
		MSGBOX_SetMsg (msgbox,msg);
 | 
						||
	if (key)
 | 
						||
		MSGBOX_SetKey (msgbox,key);
 | 
						||
	WIN_ShowWindow((WIN_WindowStruct *)msgbox);
 | 
						||
	return WIN_RunBlock ((WIN_WindowStruct *)msgbox);
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
//弹出询问框,按键确定返回0,取消返回1
 | 
						||
int MSGBOX_Inquiry (WIN_WindowStruct *base,char *title,char *msg,char *key,char *key2)
 | 
						||
{
 | 
						||
	WIN_MsgboxStruct *msgbox=WIN_CreatMsgboxAuto (base,0,msg);
 | 
						||
	if (title)
 | 
						||
		MSGBOX_SetTitle (msgbox,title);
 | 
						||
	if (msg)
 | 
						||
		MSGBOX_SetMsg (msgbox,msg);
 | 
						||
	if (key)
 | 
						||
		MSGBOX_SetKey (msgbox,key);
 | 
						||
	if (key2)
 | 
						||
		MSGBOX_SetKey2 (msgbox,key2);
 | 
						||
	
 | 
						||
	WIN_ShowWindow((WIN_WindowStruct *)msgbox);
 | 
						||
	return WIN_RunBlock ((WIN_WindowStruct *)msgbox);
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
//弹出提示框,在一段时间后自动退出
 | 
						||
int MSGBOX_TipsTime (WIN_WindowStruct *base,char *title,char *msg,char *key,u32 ms)
 | 
						||
{
 | 
						||
	WIN_MsgboxStruct *msgbox=WIN_CreatMsgboxAuto (base,0,msg);
 | 
						||
	if (title)
 | 
						||
		MSGBOX_SetTitle (msgbox,title);
 | 
						||
	if (msg)
 | 
						||
		MSGBOX_SetMsg (msgbox,msg);
 | 
						||
	if (key)
 | 
						||
		MSGBOX_SetKey (msgbox,key);
 | 
						||
	WIN_CreatTimer ((WIN_WindowStruct *)msgbox,ms);
 | 
						||
	WIN_ShowWindow((WIN_WindowStruct *)msgbox);
 | 
						||
	return WIN_RunBlock ((WIN_WindowStruct *)msgbox);
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
//弹出选择框,按键确定返回序号,取消返回-1
 | 
						||
int MSGBOX_Select (WIN_WindowStruct *base,char *title,char **item,int itemNum,char *key,char *key2)
 | 
						||
{
 | 
						||
	int x,y,x_size,y_size;
 | 
						||
	int txt_lenMax=0;
 | 
						||
	WIN_MsgboxStruct *msgbox=WIN_CreatMsgbox (base,
 | 
						||
		(void (*)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg))MSGBOX_SelectMsgLoop,x,y,x_size,y_size);
 | 
						||
	if (title)
 | 
						||
		MSGBOX_SetTitle (msgbox,title);
 | 
						||
	
 | 
						||
	if (key)
 | 
						||
		MSGBOX_SetKey (msgbox,key);
 | 
						||
	if (key2)
 | 
						||
		MSGBOX_SetKey2 (msgbox,key2);
 | 
						||
	
 | 
						||
	//添加条目,同时记录最大长度
 | 
						||
	for (int i=0;i<itemNum;i++)
 | 
						||
	{ int len=strlen(item[i]);
 | 
						||
		MSGBOX_AddItem(msgbox,item[i]);
 | 
						||
		if (txt_lenMax<len) txt_lenMax=len; }
 | 
						||
	
 | 
						||
	//计算窗口尺寸
 | 
						||
	x_size=txt_lenMax*WIN_GetFontWidth()/2+4+WIN_GetFontWidth();
 | 
						||
	y_size=msgbox->itemNum*msgbox->y_step+WIN_GetFontHight()*4;
 | 
						||
	
 | 
						||
	//调整显示位置在正中间
 | 
						||
	if (base)
 | 
						||
	{
 | 
						||
		if (x_size>base->x_size) x_size=base->x_size;
 | 
						||
		y_size+=(x_size/base->x_size)*WIN_GetFontHight();//单行超过屏幕大小时,最多允许单个行超过屏幕大小
 | 
						||
		if (y_size>base->y_size) y_size=base->y_size;
 | 
						||
		x=(base->x_size-x_size)/2;y=(base->y_size-y_size)/2;
 | 
						||
	}
 | 
						||
	else
 | 
						||
	{
 | 
						||
		if (x_size>WIN_GetBaseWindow()->x_size) x_size=WIN_GetBaseWindow()->x_size;
 | 
						||
		y_size+=(x_size/WIN_GetBaseWindow()->x_size)*WIN_GetFontHight();//单行超过屏幕大小时,最多允许单个行超过屏幕大小
 | 
						||
		if (y_size>WIN_GetBaseWindow()->y_size) y_size=WIN_GetBaseWindow()->y_size;
 | 
						||
		x=(WIN_GetBaseWindow()->x_size-x_size)/2;y=(WIN_GetBaseWindow()->y_size-y_size)/2;
 | 
						||
	}
 | 
						||
	((WIN_WindowStruct *)msgbox)->x=x;
 | 
						||
	((WIN_WindowStruct *)msgbox)->y=y;
 | 
						||
	((WIN_WindowStruct *)msgbox)->x_size=x_size;
 | 
						||
	((WIN_WindowStruct *)msgbox)->y_size=y_size;
 | 
						||
	
 | 
						||
	//设置背景
 | 
						||
	WIN_SetBackPic ((WIN_WindowStruct *)msgbox);
 | 
						||
	
 | 
						||
	WIN_ShowWindow((WIN_WindowStruct *)msgbox);
 | 
						||
	return WIN_RunBlock ((WIN_WindowStruct *)msgbox);
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
 |