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);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|