147 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "mywin_inc.h"
 | |
| 
 | |
| 
 | |
| //定义按钮类型
 | |
| #define WIN_BUTTON_TYPE "WIN_ButtonStruct"
 | |
| 
 | |
| 
 | |
| 
 | |
| //在堆中创建一个按钮
 | |
| WIN_ButtonStruct *WIN_CreatButton (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))BUTTON_DefaultMsgLoop;  
 | |
| 	}
 | |
| 	
 | |
| 	WIN_ButtonStruct *ret=mymalloc (sizeof ( WIN_ButtonStruct));
 | |
| 	//调用父类的构造函数
 | |
| 	if (ret)
 | |
| 	{
 | |
| 		mymemset (ret,0,sizeof ( WIN_ButtonStruct));
 | |
| 		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_BUTTON_TYPE;
 | |
| 			((WIN_WindowStruct *)ret)->keyChid=1;//作为子窗口被创建
 | |
| 			
 | |
| 			//构造一个
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	
 | |
| 	return ret;
 | |
| }
 | |
| 
 | |
| 
 | |
| //设置按键的字符
 | |
| void BUTTON_SetKeyString (WIN_ButtonStruct *button,char *key)
 | |
| {
 | |
| 	button->key=key;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| //默认绘制函数
 | |
| void BUTTON_DefaultPaint (WIN_ButtonStruct *button)
 | |
| {
 | |
| 	int x_size=((WIN_WindowStruct *)button)->x_size;
 | |
| 	int y_size=((WIN_WindowStruct *)button)->y_size;
 | |
| 	
 | |
| 	WIN_PaintBackGround((WIN_WindowStruct *)button);
 | |
| 	if (button->press)
 | |
| 	{
 | |
| 		WIN_SetLcdBkColor (0x80808080);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		WIN_SetLcdBkColor (0xffffffff);
 | |
| 	}
 | |
| //	WIN_Clear();
 | |
| 	if (button->press)
 | |
| 		WIN_SetLcdColor (~0xff00ff);
 | |
| 	else
 | |
| 		WIN_SetLcdColor (0xff00ff);
 | |
| 	if (y_size>WIN_GetFontHight())
 | |
| 	{
 | |
| 		WIN_DrawTxtHCenterAt(button->key,x_size/2,y_size/2-WIN_GetFontHight()/2);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		WIN_DrawTxtHCenterAt(button->key,x_size/2,0);
 | |
| 	}
 | |
| 	WIN_SetLcdColor(0xff0000);
 | |
| 	WIN_DrawHLine(0,y_size-2,x_size-1);
 | |
| }
 | |
| 
 | |
| 
 | |
| //默认消息处理函数
 | |
| void BUTTON_DefaultMsgLoop (WIN_ButtonStruct *button,WIN_MsgStruct *msg)
 | |
| {
 | |
| 	WIN_MoveStruct *m=0;
 | |
| 	switch (msg->msg)
 | |
| 	{	
 | |
| 		case WIN_MSG_PAINT:
 | |
| 			BUTTON_DefaultPaint(button);
 | |
| 		break;
 | |
| 		case WIN_MSG_INIT:
 | |
| 			WIN_SetBackPic((WIN_WindowStruct *)button);
 | |
| 		break;
 | |
| 		case WIN_MSG_KEY:
 | |
| 		break;
 | |
| 		case WIN_MSG_TOUCH:
 | |
| 		break;
 | |
| 		case WIN_MSG_CHID:
 | |
| 		break;
 | |
| 		case WIN_MSG_DELETE:
 | |
| 		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:
 | |
| 					button->press=0;
 | |
| 					WIN_SetInvalid ((WIN_WindowStruct *)button);
 | |
| 					break;
 | |
| 				case MOVE_DATA_TOUCHOUT:
 | |
| 					if (button->press)
 | |
| 						WIN_SendMsgToPrent((WIN_WindowStruct *)button,CHID_USER,BUTTON_PRESSED);
 | |
| 					button->press=0;
 | |
| 					WIN_SetInvalid ((WIN_WindowStruct *)button);
 | |
| 					break;
 | |
| 				case MOVE_DATA_TOUCHIN:
 | |
| 					button->press=1;
 | |
| 					WIN_SetInvalid ((WIN_WindowStruct *)button);
 | |
| 					break;
 | |
| 				default:
 | |
| 					WIN_DefaultMsgLoop((WIN_WindowStruct *)button,msg);
 | |
| 					break;
 | |
| 			}
 | |
| 			break;
 | |
| 		default:
 | |
| 			WIN_DefaultMsgLoop((WIN_WindowStruct *)button,msg);
 | |
| 		break;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 |