Files
player/Project/Src/MyWin/MyWinCore/mywin_msg.c

979 lines
21 KiB
C
Raw Normal View History

2025-06-27 00:32:57 +08:00
#include "mywin_inc.h"
2025-07-05 19:47:28 +08:00
//<2F><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>0<EFBFBD><30><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʧ<EFBFBD><CAA7>
2025-06-27 00:32:57 +08:00
int WIN_StorTouchStruct (WIN_TouchStruct *t)
{
static int press=0;
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>л<EFBFBD>û<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
2025-06-27 00:32:57 +08:00
if (WIN_GetWinStruct()->touchQueue.data==0) return -1;
if (WIN_GetWinStruct()->keyShield==1) return -2;
2025-07-05 19:47:28 +08:00
//<2F><EFBFBD><E6B4A2><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
if ((press!=t->pressNum)||t->pressNum)
{
press=t->pressNum;
if (QUEUE_In (&WIN_GetWinStruct()->touchQueue,t)==1)
return -3;
else
return 0;
}
return -4;
}
2025-07-05 19:47:28 +08:00
//<2F><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʧ<EFBFBD><CAA7>
2025-06-27 00:32:57 +08:00
int WIN_StorKeyStruct (WIN_KeyStruct *k)
{
static int press=0;
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>л<EFBFBD>û<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
2025-06-27 00:32:57 +08:00
if (WIN_GetWinStruct()->keyQueue.data==0) return -1;
if (WIN_GetWinStruct()->keyShield==1) return -2;
2025-07-05 19:47:28 +08:00
//<2F><EFBFBD><E6B4A2><EFBFBD><EFBFBD>һ<EFBFBD>ΰ<EFBFBD><CEB0><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD><EFBFBD><EFBFBD>Ϣ
2025-06-27 00:32:57 +08:00
if ((press!=k->state)||k->state)
{
press=k->state;
if (QUEUE_In (&WIN_GetWinStruct()->keyQueue,k)==1)
return -1;
else
return 0;
}
return -1;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>հ<EFBFBD><D5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void WIN_ClearKeyQueue (void)
{
WIN_KeyStruct k={0};
while (QUEUE_Out (&WIN_GetWinStruct()->keyQueue,&k))
{
}
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void WIN_ClearTouchQueue (void)
{
WIN_KeyStruct k={0};
while (QUEUE_Out (&WIN_GetWinStruct()->touchQueue,&k))
{
}
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>ΰ<EFBFBD><CEB0><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
2025-06-27 00:32:57 +08:00
void WIN_KeyShieldOn (void)
{
WIN_GetWinStruct()->keyShield=1;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD><CEB0><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
2025-06-27 00:32:57 +08:00
void WIN_KeyShieldOff (void)
{
WIN_GetWinStruct()->keyShield=0;
}
2025-07-05 19:47:28 +08:00
//Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void WIN_DefaultMsgLoop (WIN_WindowStruct *win,WIN_MsgStruct *msg)
{
switch (msg->msg)
{
case WIN_MSG_PAINT:
WIN_DefaultPaint(win);
break;
case WIN_MSG_INIT:
break;
case WIN_MSG_KEY:
// if (win!= WIN_GetBaseWindow())
// win->deleteWindow(win);
break;
case WIN_MSG_TOUCH:
// if (win != WIN_GetBaseWindow())
// win->deleteWindow(win);
break;
case WIN_MSG_CHID:
break;
case WIN_MSG_DELETE:
break;
case WIN_MSG_MOVE:
break;
case WIN_MSG_EXTMSG:
break;
default:
break;
}
}
2025-07-05 19:47:28 +08:00
//<2F>޸Ĵ<DEB8><C4B4>ڵ<EFBFBD><DAB5><EFBFBD>Ϣѭ<CFA2><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void *WIN_SetMsgCallBack (WIN_WindowStruct *win, void (*msgLoop)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg))
{
void *ret=win->msgLoop;
win->msgLoop=msgLoop;
return ret;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>Ϣѭ<CFA2><D1AD>
2025-06-27 00:32:57 +08:00
void *WIN_SetMsgLoopCallBack (WIN_WindowStruct *win,void (*msgLoop)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg))
{
void *ret=0;
if (win)
{
ret=win->msgLoop;
win->msgLoop=msgLoop;
}
else
{
ret=WIN_GetBaseWindow()->msgLoop;
WIN_GetBaseWindow()->msgLoop=msgLoop;
}
return ret;
}
2025-07-05 19:47:28 +08:00
//<2F><EFBFBD>ⲿ<EFBFBD><E2B2BF>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EEB6AF><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>0<EFBFBD><30><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʧ<EFBFBD><CAA7>
2025-06-27 00:32:57 +08:00
int WIN_StorExtMsg (void *msgData,int size)
{
int ret=-1;
WIN_MsgStruct msg={0};
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
2025-06-27 00:32:57 +08:00
if (WIN_GetWinStruct()->BlockWin[0])
{
msg.msg=WIN_MSG_EXTMSG;
msg.data.p=mymalloc (size);
mymemcpy (msg.data.p,msgData,size);
ret=WIN_SendMsg (0,WIN_GetWinStruct()->BlockWin[0],&msg);
}
return ret;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF>Ϣ<EFBFBD><CFA2>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int WIN_WinStorExtMsg (WIN_WindowStruct *win,void *msgData,int size)
{
int ret=-1;
WIN_MsgStruct msg={0};
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
2025-06-27 00:32:57 +08:00
if (win)
{
msg.msg=WIN_MSG_EXTMSG;
msg.data.p=mymalloc (size);
mymemcpy (msg.data.p,msgData,size);
ret=WIN_SendMsg (0,win,&msg);
}
return ret;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int WIN_SendMsg (WIN_WindowStruct *win,WIN_WindowStruct *dscWin,WIN_MsgStruct *msg)
{
int ret=-1;
if (win) msg->srcWin=win;
2025-07-05 19:47:28 +08:00
if (dscWin) //Ŀ<><EFBFBD><EAB4B0>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
2025-06-27 00:32:57 +08:00
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵĴ<D9B5><C4B4>ڷ<EFBFBD><DAB7><EFBFBD>Ϣ
2025-06-27 00:32:57 +08:00
if (dscWin->memFree) ret=-1;
else ret=QUEUE_In (&dscWin->winMsgQueue,msg);
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
2025-06-27 00:32:57 +08:00
if (ret!=0)
{
2025-07-05 19:47:28 +08:00
//<2F>ͷ<EFBFBD><CDB7><EFBFBD>Щ<EFBFBD><D0A9>Ϣ<EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
2025-06-27 00:32:57 +08:00
switch (msg->msg)
{
case WIN_MSG_KEY:
case WIN_MSG_TOUCH:
case WIN_MSG_EXTMSG:
case WIN_MSG_MOVE:
myfree(msg->data.p);
break;
}
}
return ret;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int WIN_SendMsgToPrent (WIN_WindowStruct *win,u32 type,u32 data)
{
WIN_MsgStruct msg1={0};
msg1.msg=WIN_MSG_CHID;
msg1.data.v=type;
msg1.data2.v=data;
return WIN_SendMsg (win,win->baseWin,&msg1);
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void WIN_ClearMsgQueue (WIN_WindowStruct *win)
{
WIN_MsgStruct msg={0};
while (QUEUE_Out (&win->winMsgQueue,&msg))
{
switch (msg.msg)
{
2025-07-05 19:47:28 +08:00
//<2F>ͷŹ<CDB7><C5B9><EFBFBD><EFBFBD><EFBFBD>Ϣʱ<CFA2><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
2025-06-27 00:32:57 +08:00
case WIN_MSG_KEY:
case WIN_MSG_TOUCH:
case WIN_MSG_EXTMSG:
case WIN_MSG_MOVE:
myfree(msg.data.p);
break;
}
}
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ϣ
2025-06-27 00:32:57 +08:00
WIN_MsgStruct *WIN_CheckMsg (WIN_WindowStruct *win,u32 msgType)
{
WIN_MsgStruct *msg=0;
QUEUE_CheckStart (&win->winMsgQueue);
while (msg=QUEUE_Check (&win->winMsgQueue),msg)
{
if (msg->msg==msgType)
{
return msg;
}
}
return 0;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>Ͱ<EFBFBD><CDB0><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ͬʱ<CDAC><CAB1><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void WIN_SendKeyMsg (WIN_WindowStruct *win,WIN_KeyStruct *k)
{
WIN_MsgStruct msg={0};
if(win->keyShield==0)
{
msg.msg=WIN_MSG_KEY;
2025-07-05 19:47:28 +08:00
//Ҫ<><D2AA>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>Ч,<2C><>Ϣ<EFBFBD><CFA2>ȡ<EFBFBD><C8A1>Ҫfree<65><65><EFBFBD><EFBFBD><EFBFBD>ڴ棬<DAB4><E6A3AC><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
msg.data.p=mymalloc(sizeof (WIN_KeyStruct));
mymemcpy (msg.data.p,k,sizeof (WIN_KeyStruct));
WIN_SendMsg (0,win,&msg);
}
if ((win->baseWin)&&(win->baseWin!=WIN_GetBaseWindow())&&(win->intercept==0))
{
WIN_SendKeyMsg (win->baseWin,k);
}
else if (win->baseWin)
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
if (WIN_GetWinStruct()->BlockWinNum==0)
WIN_SendKeyMsg (WIN_GetBaseWindow(),k);
}
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ͬʱ<CDAC><CAB1><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĸ<DAB5><C4B8><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void WIN_SendTouchMsg (WIN_WindowStruct *win,int lcd_x,int lcd_y)
{
WIN_TouchStruct t={0};
WIN_MsgStruct msg={0};
if(win->keyShield==0)
{
msg.msg=WIN_MSG_TOUCH;
2025-07-05 19:47:28 +08:00
//Ҫ<><D2AA>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>Ч,<2C><>Ϣ<EFBFBD><CFA2>ȡ<EFBFBD><C8A1>Ҫfree<65><65><EFBFBD><EFBFBD><EFBFBD>ڴ棬<DAB4><E6A3AC><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
msg.data.p=mymalloc(sizeof (WIN_TouchStruct));
int x,y,xs,ys;
2025-07-05 19:47:28 +08:00
WIN_GetWinPosOnLcd(win,&x,&y,&xs,&ys);//<2F><><EFBFBD><EFBFBD>Ļ<EFBFBD>ϵľ<CFB5><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
t.x[0]=lcd_x-x;t.y[0]=lcd_y-y;
mymemcpy (msg.data.p,&t,sizeof (WIN_TouchStruct));
WIN_SendMsg (0,win,&msg);
}
if ((win->baseWin)&&(win->intercept==0))
{
WIN_SendTouchMsg (win->baseWin,lcd_x,lcd_y);
}
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ͬʱ<CDAC><CAB1><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void WIN_SendTouchMove (WIN_WindowStruct *win,int move_x,int move_y)
{
WIN_MoveStruct m={0};
WIN_MsgStruct msg={0};
if(win->keyShield==0)
{
msg.msg=WIN_MSG_MOVE;
msg.data.p=mymalloc (sizeof (WIN_MoveStruct));
m.moveType=MOVE_DATA_MOVED;
m.x_move=move_x;
m.y_move=move_y;
mymemcpy (msg.data.p,&m,sizeof (WIN_MoveStruct));
WIN_SendMsg (0,win,&msg);
}
if ((win->baseWin)&&(win->intercept==0))
{
WIN_SendTouchMove (win->baseWin,move_x,move_y);
}
}
2025-07-05 19:47:28 +08:00
//<2F><EFBFBD><E3B2A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
2025-06-27 00:32:57 +08:00
int WIN_TouchMsgBroad (WIN_WindowStruct *base)
{
2025-07-05 19:47:28 +08:00
int have_msg=0;//<2F><><EFBFBD><EFBFBD>ֵ
2025-06-27 00:32:57 +08:00
WIN_TouchStruct t={0};
WIN_KeyStruct k={0};
WIN_MoveStruct m={0};
WIN_MsgStruct msg={0};
WIN_MsgBroadStruct *broad=&WIN_GetWinStruct()->msgBroad;
while (QUEUE_Out (&WIN_GetWinStruct()->touchQueue,&t)==1)
{
have_msg=1;
2025-07-05 19:47:28 +08:00
//<2F>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
broad->win=WIN_FindTopWinByPos (base,t.x[0],t.y[0]);
// while(broad->win&&broad->win->keyShield) broad->win=broad->win->baseWin;
if (broad->win)
{
2025-07-05 19:47:28 +08:00
//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6>ǰ<EFBFBD><C7B0>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²ų<C2B2><C5B3><EFBFBD>
2025-06-27 00:32:57 +08:00
if (broad->t_old.pressNum&&t.pressNum)
{
if (broad->win_old!=broad->win)
{
2025-07-05 19:47:28 +08:00
//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĴ<DAB5><C4B4><EFBFBD>
//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĴ<DAB5><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
if (broad->win_old)
{
int x,y,xs,ys;
msg.msg=WIN_MSG_MOVE;
msg.data.p=mymalloc (sizeof (WIN_MoveStruct));
m.moveType=MOVE_DATA_MOVEOUT;
2025-07-05 19:47:28 +08:00
WIN_GetWinPosOnLcd(broad->win_old,&x,&y,&xs,&ys);//<2F><><EFBFBD><EFBFBD>Ļ<EFBFBD>ϵľ<CFB5><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
m.x_move=t.x[0]-x;
m.y_move=t.y[0]-y;
mymemcpy (msg.data.p,&m,sizeof (WIN_MoveStruct));
WIN_SendMsg (0,broad->win_old,&msg);
msg.msg=WIN_MSG_MOVE;
msg.data.p=mymalloc (sizeof (WIN_MoveStruct));
m.moveType=MOVE_DATA_MOVEIN;
2025-07-05 19:47:28 +08:00
WIN_GetWinPosOnLcd(broad->win,&x,&y,&xs,&ys);//<2F><><EFBFBD><EFBFBD>Ļ<EFBFBD>ϵľ<CFB5><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
m.x_move=t.x[0]-x;
m.y_move=t.y[0]-y;
mymemcpy (msg.data.p,&m,sizeof (WIN_MoveStruct));
WIN_SendMsg (0,broad->win,&msg);
2025-07-05 19:47:28 +08:00
broad->Touch_long=WIN_LONGTOUCH_CHECK;//<2F>Ѿ<EFBFBD><D1BE>ƶ<EFBFBD><C6B6>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ټ<EFBFBD><D9BC><EFBFBD><E2B3A4>
2025-06-27 00:32:57 +08:00
}
else
{
2025-07-05 19:47:28 +08:00
//<2F>ɿ<EFBFBD><C9BF><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>ĵ<EFBFBD>һ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD>
2025-06-27 00:32:57 +08:00
}
broad->win_old=broad->win;
}//if (win_old!=win)
WIN_WindowStruct *win_move=0;
if (win_move=WIN_FindPrent(broad->win_old,broad->win),win_move!=0)
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>ֵû<D6B5><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
2025-06-27 00:32:57 +08:00
if (POS_RoundPix(1,broad->t_old.x[0],broad->t_old.y[0],t.x[0],t.y[0])!=0)
{
2025-07-05 19:47:28 +08:00
//<2F><>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
2025-06-27 00:32:57 +08:00
WIN_SendTouchMove (win_move,t.x[0]-broad->t_old.x[0],t.y[0]-broad->t_old.y[0]);
2025-07-05 19:47:28 +08:00
broad->Touch_long=WIN_LONGTOUCH_CHECK+10;//<2F>Ѿ<EFBFBD><D1BE>ƶ<EFBFBD><C6B6>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ټ<EFBFBD><D9BC><EFBFBD><E2B3A4>
2025-06-27 00:32:57 +08:00
}
else
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ƶ<EFBFBD>,<2C><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
if (broad->Touch_long<WIN_LONGTOUCH_CHECK)
{
broad->Touch_long++;
if (broad->Touch_long>=WIN_LONGTOUCH_CHECK)
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD>γ<EFBFBD><CEB3><EFBFBD><EFBFBD><EFBFBD>Ϣ
2025-06-27 00:32:57 +08:00
msg.msg=WIN_MSG_MOVE;
msg.data.p=mymalloc (sizeof (WIN_MoveStruct));
m.moveType=MOVE_DATA_LONG;
int x,y,xs,ys;
2025-07-05 19:47:28 +08:00
WIN_GetWinPosOnLcd(broad->win,&x,&y,&xs,&ys);//<2F><><EFBFBD><EFBFBD>Ļ<EFBFBD>ϵľ<CFB5><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
m.x_move=t.x[0]-x;
m.y_move=t.y[0]-y;
mymemcpy (msg.data.p,&m,sizeof (WIN_MoveStruct));
WIN_SendMsg (0,broad->win_old,&msg);
}
}
}
}//if (win_move=WIN_FindPrent(win_old,win),win_move!=0)
}//if (t_old.pressNum&&t.pressNum)
else
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
if (broad->Touch_long&&(broad->Touch_long<WIN_LONGTOUCH_CHECK))
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>Ͷ̰<CDB6><CCB0><EFBFBD>Ϣ
2025-06-27 00:32:57 +08:00
msg.msg=WIN_MSG_MOVE;
msg.data.p=mymalloc (sizeof (WIN_MoveStruct));
m.moveType=MOVE_DATA_SHORT;
int x,y,xs,ys;
2025-07-05 19:47:28 +08:00
WIN_GetWinPosOnLcd(broad->win,&x,&y,&xs,&ys);//<2F><><EFBFBD><EFBFBD>Ļ<EFBFBD>ϵľ<CFB5><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
m.x_move=t.x[0]-x;
m.y_move=t.y[0]-y;
mymemcpy (msg.data.p,&m,sizeof (WIN_MoveStruct));
WIN_SendMsg (0,broad->win_old,&msg);
}
2025-07-05 19:47:28 +08:00
//<2F><>Ļ<EFBFBD>ɿ<EFBFBD><C9BF>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⸴λ
2025-06-27 00:32:57 +08:00
broad->Touch_long=0;
2025-07-05 19:47:28 +08:00
//<2F><>Ļ<EFBFBD>ɿ<EFBFBD><C9BF>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ڼ们<DABC><E4BBAC><EFBFBD><EFBFBD>λ
2025-06-27 00:32:57 +08:00
broad->win_old=0;
if (t.pressNum==0)
{
2025-07-05 19:47:28 +08:00
//<2F><>Ļ<EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>
2025-06-27 00:32:57 +08:00
msg.msg=WIN_MSG_MOVE;
msg.data.p=mymalloc (sizeof (WIN_MoveStruct));
m.moveType=MOVE_DATA_TOUCHOUT;
int x,y,xs,ys;
2025-07-05 19:47:28 +08:00
WIN_GetWinPosOnLcd(broad->win,&x,&y,&xs,&ys);//<2F><><EFBFBD><EFBFBD>Ļ<EFBFBD>ϵľ<CFB5><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
m.x_move=t.x[0]-x;
m.y_move=t.y[0]-y;
mymemcpy (msg.data.p,&m,sizeof (WIN_MoveStruct));
WIN_SendMsg (0,broad->win,&msg);
}
else
{
2025-07-05 19:47:28 +08:00
//<2F>ɿ<EFBFBD><C9BF><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>ĵ<EFBFBD>һ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD>
2025-06-27 00:32:57 +08:00
msg.msg=WIN_MSG_MOVE;
msg.data.p=mymalloc (sizeof (WIN_MoveStruct));
m.moveType=MOVE_DATA_TOUCHIN;
int x,y,xs,ys;
2025-07-05 19:47:28 +08:00
WIN_GetWinPosOnLcd(broad->win,&x,&y,&xs,&ys);//<2F><><EFBFBD><EFBFBD>Ļ<EFBFBD>ϵľ<CFB5><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
m.x_move=t.x[0]-x;
m.y_move=t.y[0]-y;
mymemcpy (msg.data.p,&m,sizeof (WIN_MoveStruct));
WIN_SendMsg (0,broad->win,&msg);
}
}
broad->t_old.x[0]=t.x[0];broad->t_old.y[0]=t.y[0];
broad->t_old.pressNum=t.pressNum;
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ϣ
2025-06-27 00:32:57 +08:00
WIN_SendTouchMsg (broad->win,t.x[0],t.y[0]);
}//if (win)
else
{
if (broad->t_old.pressNum==0&&t.pressNum)
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
msg.msg=WIN_MSG_MOVE;
msg.data.p=mymalloc (sizeof (WIN_MoveStruct));
m.moveType=MOVE_DATA_OUTSIDE;
m.x_move=0;
m.y_move=0;
mymemcpy (msg.data.p,&m,sizeof (WIN_MoveStruct));
WIN_SendMsg (0,base,&msg);
}
broad->t_old.x[0]=t.x[0];broad->t_old.y[0]=t.y[0];
broad->t_old.pressNum=t.pressNum;
}
}//while (QUEUE_Out (&g_win_touchQueue,&t)==1)
return have_msg;
}
2025-07-05 19:47:28 +08:00
//<2F><EFBFBD><E3B2A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
2025-06-27 00:32:57 +08:00
int WIN_KeyMsgBroad (WIN_WindowStruct *base)
{
2025-07-05 19:47:28 +08:00
int have_msg=0;//<2F><><EFBFBD><EFBFBD>ֵ
2025-06-27 00:32:57 +08:00
WIN_TouchStruct t={0};
WIN_KeyStruct k={0};
WIN_MoveStruct m={0};
WIN_MsgStruct msg={0};
WIN_MsgBroadStruct *broad=&WIN_GetWinStruct()->msgBroad;
while (QUEUE_Out (&WIN_GetWinStruct()->keyQueue,&k)==1)
{
have_msg=1;
WIN_WindowStruct *win_key=0;
if (win_key =WIN_FindTopWin(base),win_key!=0)
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>
2025-06-27 00:32:57 +08:00
if ((broad->k_old.key==k.key)&&k.key)
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>µ<EFBFBD>
2025-06-27 00:32:57 +08:00
if (k.state)
{
if (broad->Key_long<WIN_LONGTOUCH_CHECK)
{
broad->Key_long++;
if (broad->Key_long>=WIN_LONGTOUCH_CHECK)
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
k.longPress|=k.key;
k.shortPress=0;
k.firstPress=0;
k.unPress=0;
WIN_SendKeyMsg (win_key,&k);
}
else
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
k.longPress=0;
k.shortPress=0;
k.firstPress=0;
k.unPress=0;
WIN_SendKeyMsg (win_key,&k);
}
}
else
{
2025-07-05 19:47:28 +08:00
//<2F>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>
2025-06-27 00:32:57 +08:00
broad->Key_long++;
if (broad->Key_long%WIN_LONGTOUCH_CHECK==0)
{
k.longPressNum=broad->Key_long/WIN_LONGTOUCH_CHECK;
if (k.longPressNum !=broad->k_old.longPressNum)
{
2025-07-05 19:47:28 +08:00
//<2F>ٴδ<D9B4><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
broad->k_old.longPressNum=k.longPressNum;
k.longPress|=k.key;
k.shortPress=0;
k.firstPress=0;
k.unPress=0;
WIN_SendKeyMsg (win_key,&k);
}
}
}
}//if (k.state)
else
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>±<EFBFBD>Ϊ<EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
if (broad->Key_long<WIN_LONGTOUCH_CHECK)
{
2025-07-05 19:47:28 +08:00
//<2F>̰<EFBFBD>
2025-06-27 00:32:57 +08:00
k.shortPress|=k.key;
k.longPress=0;
k.firstPress=0;
k.unPress=0;
WIN_SendKeyMsg (win_key,&k);
}
else
{
2025-07-05 19:47:28 +08:00
//<2F>ɿ<EFBFBD><C9BF>˰<EFBFBD><CBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD><D2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
broad->k_old.longPressNum=0;
}
k.unPress=k.key;
k.firstPress=0;
k.longPress=0;
k.shortPress=0;
WIN_SendKeyMsg (win_key,&k);
broad->Key_long=0;
k.key=0;
}
}//if ((k_old.key==k.key)&&k.key)
else if ((broad->k_old.state==0)&&(k.state))
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ΰ<EFBFBD><CEB0><EFBFBD>
2025-06-27 00:32:57 +08:00
broad->Key_long=0;
k.firstPress=k.key;
k.longPress=0;
k.shortPress=0;
WIN_SendKeyMsg (win_key,&k);
}
broad->k_old.key=k.key;
broad->k_old.state=k.state;
}//if (win_key =WIN_FindTopWin(win),win_key!=0)
}
return have_msg;
}
2025-07-05 19:47:28 +08:00
//<2F><EFBFBD><E3B2A5><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ϣ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD>0
2025-06-27 00:32:57 +08:00
int WIN_MsgBroad (WIN_WindowStruct *base)
{
return WIN_KeyMsgBroad(base)|WIN_TouchMsgBroad (base);
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int WIN_Working (WIN_WindowStruct *win)
{
WIN_MoveStruct *m=0;
RECT_Struct r={0};
2025-07-05 19:47:28 +08:00
int run=0; //<2F><><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣû<CFA2><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Լ<EFBFBD><D4BC>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>Ϣ
2025-06-27 00:32:57 +08:00
WIN_MsgStruct msg={0};
win->msgLoopEnter++;
WIN_WindowStruct *winCurrent_old=WIN_GetWinStruct()->winCurrent;
WIN_GetWinStruct()->winCurrent=win;
void *msgData=0;
while (QUEUE_Out (&win->winMsgQueue,&msg))
{
run=1;
2025-07-05 19:47:28 +08:00
//<2F>ȸ<EFBFBD><C8B8><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>Ȼ<EFBFBD><C8BB><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>Ϣָ<CFA2><EFBFBD><EBA3AC>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>Ϣѭ<CFA2><D1AD><EFBFBD><EFBFBD>ִ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ұָ<D2B0><D6B8>
2025-06-27 00:32:57 +08:00
msgData=msg.data.p;
switch (msg.msg)
{
2025-07-05 19:47:28 +08:00
//<2F><>Щ<EFBFBD><D0A9><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>Ϣ<EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>֮ǰҪ<C7B0><D2AA><EFBFBD><EFBFBD><EFBFBD>úû<C3BA><C3BB><EFBFBD>
2025-06-27 00:32:57 +08:00
case WIN_MSG_PAINT:
mymemcpy(&r,&win->invaldRect,sizeof(RECT_Struct));
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Ҫ<EFBFBD>ػ<EFBFBD>
2025-06-27 00:32:57 +08:00
if (win->invald==0) continue;
2025-07-05 19:47:28 +08:00
//ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>λ<EFBFBD>õ<EFBFBD><C3B5>Ӵ<EFBFBD><D3B4><EFBFBD>ҲҪ<D2B2>ػ<EFBFBD>
2025-06-27 00:32:57 +08:00
for (int i=win->chidWinNum;i>0;i--)
{
2025-07-05 19:47:28 +08:00
//<2F>ж<EFBFBD><D0B6><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڵ<EFBFBD>
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
RECT_Struct ret={0};
RECT_Struct r1={0};r1.x=win->chidWin[i-1]->x;r1.y=win->chidWin[i-1]->y;
r1.x_size=win->chidWin[i-1]->x_size;r1.y_size=win->chidWin[i-1]->y_size;
if (POS_RectIntersection(&ret,&r1,&r))
{
2025-07-05 19:47:28 +08:00
ret.x-=win->chidWin[i-1]->x;ret.y-=win->chidWin[i-1]->y;//<2F><>ȥ<EFBFBD><C8A5><EFBFBD>ڶ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>꣬2020.2.26
2025-06-27 00:32:57 +08:00
WIN_SetInvalidRect(win->chidWin[i-1],ret.x,ret.y,ret.x_size,ret.y_size);
if(POS_RectSub(&r,&r,&r1)==0)
{
2025-07-05 19:47:28 +08:00
//<2F>ػ<EFBFBD><D8BB><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD>
2025-06-27 00:32:57 +08:00
break;
}
}
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ػ<EFBFBD>
2025-06-27 00:32:57 +08:00
WIN_TopWinPaint(win);
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>־
2025-06-27 00:32:57 +08:00
win->invald=0;
2025-07-05 19:47:28 +08:00
//<2F><>Ҫ<EFBFBD>ػ<EFBFBD><D8BB>Ĵ<EFBFBD><C4B4><EFBFBD>-1
2025-06-27 00:32:57 +08:00
if (WIN_GetWinStruct()->numOfWindowToPrint) WIN_GetWinStruct()->numOfWindowToPrint--;
2025-07-05 19:47:28 +08:00
else while (1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>λ<EFBFBD><CEBB>
2025-06-27 00:32:57 +08:00
2025-07-05 19:47:28 +08:00
//<2F><>ͼ<EFBFBD><CDBC><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
if(r.x_size<=0||r.y_size<=0) continue;
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>û<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
WIN_EnterPaint (win);
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
2025-06-27 00:32:57 +08:00
WIN_SetWinInvalidRect(win,&r);
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
WIN_GetWinStruct()->lcd->enterLayerBuff();
break;//case WIN_MSG_PAINT:
}//switch (msg.msg)
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>Ϣѭ<CFA2><D1AD>
2025-06-27 00:32:57 +08:00
win->msgLoop(win,&msg);
switch (msg.msg)
{
2025-07-05 19:47:28 +08:00
//<2F><>Щ<EFBFBD><D0A9><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>Ϣ<EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>ʱʹ<CAB1><CAB9><EFBFBD><EFBFBD>malloc<6F><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷŵ<CDB7>
2025-06-27 00:32:57 +08:00
case WIN_MSG_KEY:
case WIN_MSG_TOUCH:
case WIN_MSG_EXTMSG:
myfree(msgData);
break;
case WIN_MSG_MOVE:
m=msg.data.p;
switch (m->moveType)
{
2025-07-05 19:47:28 +08:00
//<2F>ѵ<EFBFBD><D1B5><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
2025-06-27 00:32:57 +08:00
case MOVE_DATA_TOUCHIN:
if (win->baseWin)
{
if (win!=win->baseWin->chidWin[win->baseWin->chidWinNum-1])
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>Ƕ<EFBFBD><C7B6>˴<EFBFBD><CBB4>ڣ<EFBFBD><DAA3>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
if (WIN_SetChidWinTop (win->baseWin,win)==0)
WIN_SetInvalid(win);
}
}
break;
}
myfree(msgData);
break;//case WIN_MSG_MOVE:
2025-07-05 19:47:28 +08:00
//<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ɣ<EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD>Ļ
2025-06-27 00:32:57 +08:00
case WIN_MSG_PAINT:
if (WIN_GetWinStruct()->numOfWindowToPrint==0) //LCD_ExitLayerBuff();
WIN_GetWinStruct()->lcd->exitLayerBuff();
break;
2025-07-05 19:47:28 +08:00
//<2F><>Щ<EFBFBD><D0A9><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>Ϣ<EFBFBD><CFA2>Ҫ<EFBFBD><D2AA><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
2025-06-27 00:32:57 +08:00
case WIN_MSG_DELETE:
if (win->baseWin)
{
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ػ<EFBFBD>
2025-06-27 00:32:57 +08:00
//WIN_SetInvalidRect(win->baseWin,win->x,win->y,win->x_size,win->y_size);
}//if (win->baseWin)
break;
}//switch (msg.msg)
}//while (QUEUE_Out (&win->winMsgQueue,&msg))
2025-07-05 19:47:28 +08:00
//Ȼ<><C8BB><EFBFBD>Ӵ<EFBFBD><D3B4>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ϣ
2025-06-27 00:32:57 +08:00
for (int i=0;i<win->chidWinNum;i++)
{
run|=WIN_Working(win->chidWin[i]);
}
WIN_GetWinStruct()->winCurrent=winCurrent_old;
if (win->msgLoopEnter)
win->msgLoopEnter--;
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣѭ<CFA2><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD><D2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
if ((win->msgLoopEnter==0)&&(win->memFree))
{win->memFree(win);}
return run;
}
2025-07-05 19:47:28 +08:00
//<2F>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
2025-06-27 00:32:57 +08:00
void WIN_Delay (int ms)
{
WIN_GetWinStruct()->delay_ms=ms;
WIN_Delay_ms(WIN_GetWinStruct()->delay_ms);
if (WIN_GetWinStruct()->runCallBack) WIN_GetWinStruct()->runCallBack();
WIN_TimerWork ();
while(WIN_MsgBroad(WIN_GetBaseWindow()));
while(WIN_Working (WIN_GetBaseWindow()));
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int WIN_RunBlock (WIN_WindowStruct *win)
{
WIN_WindowStruct *win_save=win;
2025-07-05 19:47:28 +08:00
//<2F>Ƿ񳬳<C7B7><F1B3ACB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>ײ<EFBFBD><D7B2><EFBFBD>
2025-06-27 00:32:57 +08:00
if (WIN_GetWinStruct()->BlockWinNum>=WIN_BLOCK_MAXNUM)
{
win->deleteWindow(win);
return -1;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB>ջ
2025-06-27 00:32:57 +08:00
for (int i=WIN_GetWinStruct()->BlockWinNum;i>0;i--)
{
WIN_GetWinStruct()->BlockWin[i]=WIN_GetWinStruct()->BlockWin[i-1];
}
WIN_GetWinStruct()->BlockWin[0]=win;
WIN_GetWinStruct()->BlockWinNum++;
2025-07-05 19:47:28 +08:00
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
while (WIN_GetWinStruct()->BlockWin[0]==win_save)
{
WIN_Delay_ms(WIN_GetWinStruct()->delay_ms);
if (WIN_GetWinStruct()->runCallBack) WIN_GetWinStruct()->runCallBack();
WIN_TimerWork ();
while(WIN_MsgBroad(WIN_GetWinStruct()->BlockWin[0]));
//WIN_Working (WIN_GetBaseWindow());
while(WIN_Working (WIN_GetBaseWindow()));
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>ش<EFBFBD><D8B4>ڵķ<DAB5><C4B7><EFBFBD>ֵ
2025-06-27 00:32:57 +08:00
return WIN_GetWinStruct()->BlockWinReturn;
}
2025-07-05 19:47:28 +08:00
//<2F>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ч
2025-06-27 00:32:57 +08:00
void WIN_SetInvalid (WIN_WindowStruct *win)
{
WIN_SetInvalidRect(win,0,0,win->x_size,win->y_size);
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB6A5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ч
2025-06-27 00:32:57 +08:00
void WIN_SetInvalidWhenTop (WIN_WindowStruct *win)
{
WIN_SetInvalidRectWhenTop(win,0,0,win->x_size,win->y_size);
}
2025-07-05 19:47:28 +08:00
//<2F>Ѵ<EFBFBD><D1B4><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ч,<2C>Դ<EFBFBD><D4B4>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>Ϊԭ<CEAA><D4AD>
2025-06-27 00:32:57 +08:00
void WIN_SetInvalidRect (WIN_WindowStruct *win,int x,int y,int x_size,int y_size)
{
RECT_Struct *r;
2025-07-05 19:47:28 +08:00
if (win->memFree) return; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵĴ<D9B5><C4B4>ڷ<EFBFBD><DAB7><EFBFBD>Ϣ
//<2F><><EFBFBD><EFBFBD>paint<6E><74>Ϣ
2025-06-27 00:32:57 +08:00
WIN_MsgStruct msg={0};
msg.msg=WIN_MSG_PAINT;
r=mymalloc (sizeof (RECT_Struct));
WIN_GetWinPosOnLcd(win, &r->x, &r->y, &r->x_size, &r->y_size);
RECT_Struct r_win = { 0 };
r_win.x = r->x; r_win.y = r->y;
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ڴ<EFBFBD><DAB4>ڷ<EFBFBD>Χ<EFBFBD><CEA7>
2025-06-27 00:32:57 +08:00
WIN_WindowStruct *t = win;
RECT_Struct r_now = { 0 };
do {
WIN_GetWinPosOnLcd(t, &r_now.x, &r_now.y, &r_now.x_size, &r_now.y_size);
POS_RectIntersection(r, r, &r_now);
t = t->baseWin;
} while (t);
r->x -= r_win.x; r->y -= r_win.y;
RECT_Struct r_in={0};
r_in.x=x;r_in.y=y;r_in.x_size=x_size;r_in.y_size=y_size;
POS_RectIntersection (r,r, &r_in);
if (win->invald==0)
{
WIN_SendMsg (0,win,&msg);
mymemcpy (&win->invaldRect,r,sizeof (RECT_Struct));
win->invald=1;
2025-07-05 19:47:28 +08:00
WIN_GetWinStruct()->numOfWindowToPrint++;//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD>ƵĴ<C6B5><C4B4>ڼ<EFBFBD>1
2025-06-27 00:32:57 +08:00
}
else
{
POS_RectContain (&win->invaldRect,&win->invaldRect,r);
}
myfree(r);
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB6A5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ч
2025-06-27 00:32:57 +08:00
void WIN_SetInvalidRectWhenTop (WIN_WindowStruct *win,int x,int y,int x_size,int y_size)
{
if (WIN_FindBlock(win)==0)
{
WIN_SetInvalidRect (win,x,y,x_size,y_size);
}
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
2025-06-27 00:32:57 +08:00
void WIN_Move(WIN_WindowStruct *win,int x_move,int y_move)
{
RECT_Struct r1={0};
RECT_Struct r2={0};
r1.x=win->x;r1.y=win->y;r1.x_size=win->x_size;r1.y_size=win->y_size;
mymemcpy(&r2,&r1 ,sizeof(RECT_Struct));
win->x+=x_move;
win->y+=y_move;
r2.x=win->x;r2.y=win->y;
POS_RectContain(&r1,&r1,&r2);
if(win->baseWin)
WIN_SetInvalidRect(win->baseWin,r1.x,r1.y,r1.x_size,r1.y_size);
// WIN_SetInvalid(win);
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void WIN_SetPos(WIN_WindowStruct *win,int x,int y)
{
RECT_Struct r1={0};
RECT_Struct r2={0};
r1.x=win->x;r1.y=win->y;r1.x_size=win->x_size;r1.y_size=win->y_size;
mymemcpy(&r2,&r1 ,sizeof(RECT_Struct));
win->x=x;
win->y=y;
r2.x=win->x;r2.y=win->y;
POS_RectContain(&r1,&r1,&r2);
if(win->baseWin)
WIN_SetInvalidRect(win->baseWin,r1.x,r1.y,r1.x_size,r1.y_size);
// WIN_SetInvalid(win);
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>ô<EFBFBD><C3B4>ڳߴ<DAB3>
2025-06-27 00:32:57 +08:00
void WIN_SetSize(WIN_WindowStruct *win,int x_size,int y_size)
{
RECT_Struct r1={0};
RECT_Struct r2={0};
r1.x=win->x;r1.y=win->y;r1.x_size=win->x_size;r1.y_size=win->y_size;
mymemcpy(&r2,&r1 ,sizeof(RECT_Struct));
win->x_size=x_size;
win->y_size=y_size;
r2.x_size=win->x_size;r2.y_size=win->y_size;
POS_RectContain(&r1,&r1,&r2);
if(win->baseWin)
WIN_SetInvalidRect(win->baseWin,r1.x,r1.y,r1.x_size,r1.y_size);
// WIN_SetInvalid(win);
}