ת»»Ϊgb2312±àÂë
This commit is contained in:
@@ -2,12 +2,12 @@
|
||||
|
||||
|
||||
|
||||
//定义基本窗口类型字符串
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
|
||||
#define WIN_WINDOW_TYPE "WIN_WindowStruct"
|
||||
|
||||
|
||||
|
||||
//窗口环境变量
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
static WIN_Struct g_win_struct={0};
|
||||
|
||||
|
||||
@@ -15,13 +15,13 @@ static WIN_Struct g_win_struct={0};
|
||||
|
||||
int WIN_Init (void)
|
||||
{
|
||||
//配置初始化
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><EFBFBD>
|
||||
WIN_InitCfg();
|
||||
|
||||
//屏幕初始化
|
||||
//<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
||||
WIN_GetWinStruct()->lcd->Init();
|
||||
|
||||
//基础窗口初始化
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><EFBFBD>
|
||||
WIN_GetWinStruct()->baseWin.x=0;
|
||||
WIN_GetWinStruct()->baseWin.y=0;
|
||||
WIN_GetWinStruct()->baseWin.x_size=WIN_GetWinStruct()->lcd->getLcdSizeX();
|
||||
@@ -29,30 +29,30 @@ int WIN_Init (void)
|
||||
WIN_GetWinStruct()->baseWin.baseWin=0;
|
||||
WIN_GetWinStruct()->baseWin.chidWinMaxSize=WIN_CHIDWIN_MAXNUM;
|
||||
WIN_GetWinStruct()->baseWin.id= WIN_GetWinStruct()->winId++;
|
||||
WIN_GetWinStruct()->baseWin.winType=WIN_WINDOW_TYPE; //基本窗口类型
|
||||
WIN_GetWinStruct()->baseWin.winType=WIN_WINDOW_TYPE; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u16 color=WIN_GetWinStruct()->lcd->getLcdBkColor();
|
||||
WIN_GetWinStruct()->baseWin.color=COLOR565TO888(color);
|
||||
color=WIN_GetWinStruct()->lcd->getLcdBkColor();
|
||||
WIN_GetWinStruct()->baseWin.bkcolor=COLOR565TO888(color);
|
||||
WIN_GetWinStruct()->baseWin.msgLoop=WIN_DefaultMsgLoop;
|
||||
|
||||
//主窗口的消息队列初始化
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><EFBFBD>
|
||||
QUEUE_Init (&WIN_GetWinStruct()->baseWin.winMsgQueue ,sizeof (WIN_MsgStruct),50);
|
||||
WIN_MsgStruct msg={0};
|
||||
msg.msg=WIN_MSG_INIT;
|
||||
WIN_SendMsg(0,&WIN_GetWinStruct()->baseWin,&msg);
|
||||
|
||||
//键盘,触摸队列初始化
|
||||
//<EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><EFBFBD>
|
||||
QUEUE_Init (&WIN_GetWinStruct()->touchQueue,sizeof (WIN_TouchStruct),50);
|
||||
QUEUE_Init (&WIN_GetWinStruct()->keyQueue,sizeof (WIN_KeyStruct),50);
|
||||
|
||||
//显示基础窗口
|
||||
//<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
WIN_ShowWindow(&WIN_GetWinStruct()->baseWin);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//返回窗口环境变量
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD>ڻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
WIN_Struct *WIN_GetWinStruct (void)
|
||||
{
|
||||
return &g_win_struct;
|
||||
@@ -62,7 +62,7 @@ WIN_Struct *WIN_GetWinStruct (void)
|
||||
|
||||
|
||||
|
||||
//设置窗口运行回调函数
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>лص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void *WIN_SetRunCallBack (void (*callback)(void))
|
||||
{
|
||||
void *ret=g_win_struct.runCallBack;
|
||||
@@ -87,8 +87,8 @@ void *WIN_SetRunCallBack (void (*callback)(void))
|
||||
|
||||
|
||||
|
||||
//获取外部数据指针,这个函数在窗口应用中调用,
|
||||
//获取之后要释放g_win_struct.ExtData 指向的内存
|
||||
//<EFBFBD><EFBFBD>ȡ<EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>룬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>,
|
||||
//<EFBFBD><EFBFBD>ȡ֮<EFBFBD><EFBFBD>Ҫ<EFBFBD>ͷ<EFBFBD>g_win_struct.ExtData ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
void *WIN_GetExtData (u32 *datasize)
|
||||
{
|
||||
WIN_IRQ_DISABLE();
|
||||
@@ -101,7 +101,7 @@ void *WIN_GetExtData (u32 *datasize)
|
||||
}
|
||||
|
||||
|
||||
//放置外部数据到窗口,这个函数在其他线程或中断中调用
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̻߳<EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>
|
||||
int WIN_PlaceExtData (void *data,u32 size)
|
||||
{
|
||||
int ret=-1;
|
||||
@@ -121,8 +121,8 @@ int WIN_PlaceExtData (void *data,u32 size)
|
||||
}
|
||||
|
||||
|
||||
//设置在指定窗口运行的函数,返回0,成功
|
||||
//这个函数用于在窗口线程之外通知窗口调用函数
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>֮<EFBFBD><EFBFBD>֪ͨ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>
|
||||
int WIN_RunInWindow(const char *title,void (*fun)(void *ptr),void *ptr)
|
||||
{
|
||||
int ret=-1;
|
||||
@@ -140,8 +140,8 @@ int WIN_RunInWindow(const char *title,void (*fun)(void *ptr),void *ptr)
|
||||
return ret;
|
||||
}
|
||||
|
||||
//运行消息中的函数 ,返回0,成功
|
||||
//这个函数在窗口消息循环中接收到运行消息后调用
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>еĺ<EFBFBD><EFBFBD><EFBFBD> ,<2C><><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD>ɹ<EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣѭ<EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int WIN_RunMsgFunction(WIN_MsgStruct *msg)
|
||||
{
|
||||
int ret=-1;
|
||||
@@ -159,12 +159,12 @@ int WIN_RunMsgFunction(WIN_MsgStruct *msg)
|
||||
|
||||
|
||||
|
||||
//在堆中创建一个窗口,返回窗口的指针
|
||||
//<EFBFBD>ڶ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ش<EFBFBD><D8B4>ڵ<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
WIN_WindowStruct *WIN_CreatWindow(WIN_WindowStruct *base,
|
||||
void (*msgLoop)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg),
|
||||
int x,int y,int x_size,int y_size)
|
||||
{
|
||||
if (base==0) base=WIN_GetBaseWindow();//没有父窗口,默认父窗口
|
||||
if (base==0) base=WIN_GetBaseWindow();//û<EFBFBD>и<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>Ĭ<EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
WIN_WindowStruct*ret=mymalloc (sizeof (WIN_WindowStruct));
|
||||
mymemset(ret,0,sizeof(WIN_WindowStruct));
|
||||
u16 color=WIN_GetWinStruct()->lcd->getLcdBkColor();
|
||||
@@ -176,14 +176,14 @@ WIN_WindowStruct *WIN_CreatWindow(WIN_WindowStruct *base,
|
||||
ret->y=y;
|
||||
ret->x_size=x_size;
|
||||
ret->y_size=y_size;
|
||||
ret->id=WIN_GetWinStruct()->winId++; //设置窗口唯一ID
|
||||
ret->winType=WIN_WINDOW_TYPE; //基本窗口类型
|
||||
ret->baseWin=base; //注册父窗口
|
||||
ret->id=WIN_GetWinStruct()->winId++; //<EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>ΨһID
|
||||
ret->winType=WIN_WINDOW_TYPE; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ret->baseWin=base; //ע<EFBFBD>Ḹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (msgLoop)
|
||||
ret->msgLoop=msgLoop;//设置消息处理函数
|
||||
ret->msgLoop=msgLoop;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else
|
||||
ret->msgLoop=WIN_DefaultMsgLoop;//设置默认消息处理函数
|
||||
ret->deleteWindow=WIN_DeleteWindow;//设置销毁函数
|
||||
ret->msgLoop=WIN_DefaultMsgLoop;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ret->deleteWindow=WIN_DeleteWindow;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٺ<EFBFBD><EFBFBD><EFBFBD>
|
||||
if (WIN_AddToChidList(base,ret)==0)
|
||||
{
|
||||
QUEUE_Init (&ret->winMsgQueue ,sizeof (WIN_MsgStruct),50);
|
||||
@@ -201,12 +201,12 @@ WIN_WindowStruct *WIN_CreatWindow(WIN_WindowStruct *base,
|
||||
|
||||
|
||||
|
||||
//创建已经实例化的窗口,返回1,创建成功
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||
int WIN_CreatWindowExt(WIN_WindowStruct *win,WIN_WindowStruct *base,
|
||||
void (*msgLoop)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg),
|
||||
int x,int y,int x_size,int y_size)
|
||||
{
|
||||
if (base==0) base=WIN_GetBaseWindow();//没有父窗口,默认父窗口
|
||||
if (base==0) base=WIN_GetBaseWindow();//û<EFBFBD>и<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>Ĭ<EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mymemset(win,0,sizeof(WIN_WindowStruct));
|
||||
u16 color=WIN_GetWinStruct()->lcd->getLcdBkColor();
|
||||
win->bkcolor=COLOR565TO888(color);
|
||||
@@ -217,14 +217,14 @@ int WIN_CreatWindowExt(WIN_WindowStruct *win,WIN_WindowStruct *base,
|
||||
win->y=y;
|
||||
win->x_size=x_size;
|
||||
win->y_size=y_size;
|
||||
win->id=WIN_GetWinStruct()->winId++; //设置窗口唯一ID
|
||||
win->winType=WIN_WINDOW_TYPE; //基本窗口类型
|
||||
win->baseWin=base; //注册父窗口
|
||||
win->id=WIN_GetWinStruct()->winId++; //<EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>ΨһID
|
||||
win->winType=WIN_WINDOW_TYPE; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
win->baseWin=base; //ע<EFBFBD>Ḹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (msgLoop)
|
||||
win->msgLoop=msgLoop;//设置消息处理函数
|
||||
win->msgLoop=msgLoop;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else
|
||||
win->msgLoop=WIN_DefaultMsgLoop;//设置默认消息处理函数
|
||||
win->deleteWindow=WIN_DeleteWindow;//设置销毁函数
|
||||
win->msgLoop=WIN_DefaultMsgLoop;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
win->deleteWindow=WIN_DeleteWindow;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٺ<EFBFBD><EFBFBD><EFBFBD>
|
||||
if (WIN_AddToChidList(base,win)==0)
|
||||
{
|
||||
QUEUE_Init (&win->winMsgQueue ,sizeof (WIN_MsgStruct),50);
|
||||
@@ -244,11 +244,11 @@ int WIN_CreatWindowExt(WIN_WindowStruct *win,WIN_WindowStruct *base,
|
||||
|
||||
|
||||
|
||||
//销毁一个窗口,资源回收
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void WIN_DeleteWindow (WIN_WindowStruct *win)
|
||||
{
|
||||
|
||||
//调用子窗口的销毁函数
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٺ<EFBFBD><EFBFBD><EFBFBD>
|
||||
// for (int i=0;i<win->chidWinNum;i++)
|
||||
// {
|
||||
// (win->chidWin[i])->deleteWindow(win->chidWin[i]);
|
||||
@@ -258,27 +258,27 @@ void WIN_DeleteWindow (WIN_WindowStruct *win)
|
||||
(win->chidWin[0])->deleteWindow(win->chidWin[0]);
|
||||
}
|
||||
|
||||
//在父窗口的窗口列表中删除
|
||||
//<EFBFBD>ڸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>
|
||||
WIN_DelFromChidList(win->baseWin,win);
|
||||
|
||||
WIN_MsgStruct msg={0};
|
||||
//告知父窗口,子窗口已删除
|
||||
//<EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>
|
||||
msg.msg=WIN_MSG_CHID;
|
||||
msg.data.v=CHID_DELETE;
|
||||
msg.data2.v =win->id;
|
||||
WIN_SendMsg (win,win->baseWin,&msg);
|
||||
|
||||
//清空消息队列
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
WIN_ClearMsgQueue (win);
|
||||
|
||||
//发送delete消息
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>delete<EFBFBD><EFBFBD>Ϣ
|
||||
msg.msg=WIN_MSG_DELETE;
|
||||
WIN_SendMsg (0,win,&msg);
|
||||
|
||||
//通过运行一遍消息循环让窗口处理善后工作
|
||||
//ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣѭ<EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
WIN_Working (win);
|
||||
|
||||
//父窗口需要重绘
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ػ<EFBFBD>
|
||||
WIN_SetInvalidRect(win->baseWin,win->x,win->y,win->x_size,win->y_size);
|
||||
|
||||
|
||||
@@ -286,28 +286,28 @@ void WIN_DeleteWindow (WIN_WindowStruct *win)
|
||||
|
||||
|
||||
|
||||
//删除创建的定时器
|
||||
//ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
WIN_WinDeleteTimer(win);
|
||||
|
||||
//取消置顶
|
||||
//ȡ<EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD>
|
||||
WIN_ResetAsTopWin (win);
|
||||
|
||||
//销毁队列
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><EFBFBD><EFBFBD>
|
||||
QUEUE_Delete (&win->winMsgQueue);
|
||||
|
||||
//当前在阻塞运行本窗口,返回
|
||||
//<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (g_win_struct.BlockWin[0]==win)
|
||||
{
|
||||
WIN_SetBlockWinReturn(-1,0,0);
|
||||
}
|
||||
|
||||
//清除窗口无效标志
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>־
|
||||
if (win->invald)
|
||||
{win->invald=0;g_win_struct.numOfWindowToPrint--;}
|
||||
|
||||
//printf ("deleteWin:%s\r\n",win->winType);
|
||||
|
||||
//删除窗口,如果当前还在窗口的消息循环里,则不能立即释放内存
|
||||
//ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ڴ<EFBFBD><DAB4>ڵ<EFBFBD><DAB5><EFBFBD>Ϣѭ<CFA2><D1AD><EFBFBD><EFBFBD><EFA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
if (win->msgLoopEnter)
|
||||
{ win->memFree=myfree; }
|
||||
else{myfree(win);}
|
||||
@@ -317,7 +317,7 @@ void WIN_DeleteWindow (WIN_WindowStruct *win)
|
||||
|
||||
|
||||
|
||||
//将指定窗口设置为置顶,返回1添加成功
|
||||
//<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ö<EFBFBD>,<2C><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>ӳɹ<D3B3>
|
||||
int WIN_SetAsTopWin (WIN_WindowStruct *win)
|
||||
{
|
||||
int i=0;
|
||||
@@ -335,7 +335,7 @@ int WIN_SetAsTopWin (WIN_WindowStruct *win)
|
||||
}
|
||||
}
|
||||
|
||||
//窗口取消置顶,返回1成功
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>ɹ<EFBFBD>
|
||||
int WIN_ResetAsTopWin (WIN_WindowStruct *win)
|
||||
{
|
||||
int i=0;
|
||||
@@ -344,7 +344,7 @@ int WIN_ResetAsTopWin (WIN_WindowStruct *win)
|
||||
if (g_win_struct.TopWin[i]==win)
|
||||
{
|
||||
g_win_struct.TopWin[i]=0;
|
||||
//后面的窗口向前移
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>
|
||||
g_win_struct.TopWinNum--;
|
||||
for (;i<g_win_struct.TopWinNum;i++)
|
||||
{
|
||||
@@ -362,7 +362,7 @@ int WIN_ResetAsTopWin (WIN_WindowStruct *win)
|
||||
|
||||
|
||||
|
||||
//根据指定id号获取窗口指针
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>id<EFBFBD>Ż<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
WIN_WindowStruct *WIN_GetWindowStructById (WIN_WindowStruct *win,u32 id)
|
||||
{
|
||||
WIN_WindowStruct *ret=0;
|
||||
@@ -387,19 +387,19 @@ WIN_WindowStruct *WIN_GetWindowStructById (WIN_WindowStruct *win,u32 id)
|
||||
|
||||
|
||||
|
||||
//从子窗口列表中删除指定窗口
|
||||
//<EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int WIN_DelFromChidList (WIN_WindowStruct *win,WIN_WindowStruct *chidWin)
|
||||
{
|
||||
for (int i=0;i<win->chidWinNum;i++)
|
||||
{
|
||||
if (win->chidWin[i]==chidWin)
|
||||
{
|
||||
win->chidWin[i]=0;//删除这一个
|
||||
for (;i<win->chidWinNum-1;i++)//后面的向前移
|
||||
win->chidWin[i]=0;//ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
||||
for (;i<win->chidWinNum-1;i++)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>
|
||||
{
|
||||
win->chidWin[i]=win->chidWin[i+1];
|
||||
}
|
||||
win->chidWinNum--;//子窗口个数减一
|
||||
win->chidWinNum--;//<EFBFBD>Ӵ<EFBFBD><EFBFBD>ڸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -408,7 +408,7 @@ int WIN_DelFromChidList (WIN_WindowStruct *win,WIN_WindowStruct *chidWin)
|
||||
|
||||
|
||||
|
||||
//把指定子窗口设置为最高
|
||||
//<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int WIN_SetChidWinTop (WIN_WindowStruct *win,WIN_WindowStruct *chidWin)
|
||||
{
|
||||
WIN_WindowStruct *t=0;
|
||||
@@ -417,12 +417,12 @@ int WIN_SetChidWinTop (WIN_WindowStruct *win,WIN_WindowStruct *chidWin)
|
||||
if (win->chidWin[i]==chidWin)
|
||||
{
|
||||
t=win->chidWin[i];
|
||||
win->chidWin[i]=0;//删除这一个
|
||||
for (;i<win->chidWinNum;i++)//后面的向前移
|
||||
win->chidWin[i]=0;//ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
||||
for (;i<win->chidWinNum;i++)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>
|
||||
{
|
||||
win->chidWin[i]=win->chidWin[i+1];
|
||||
}
|
||||
win->chidWin[win->chidWinNum-1]=t;//设置为最后一个
|
||||
win->chidWin[win->chidWinNum-1]=t;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -433,7 +433,7 @@ int WIN_SetChidWinTop (WIN_WindowStruct *win,WIN_WindowStruct *chidWin)
|
||||
|
||||
|
||||
|
||||
//添加窗口到子窗口列表中
|
||||
//<EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD>
|
||||
int WIN_AddToChidList (WIN_WindowStruct *win,WIN_WindowStruct *chidWin)
|
||||
{
|
||||
if (win->chidWinNum<win->chidWinMaxSize)
|
||||
@@ -452,7 +452,7 @@ int WIN_AddToChidList (WIN_WindowStruct *win,WIN_WindowStruct *chidWin)
|
||||
|
||||
|
||||
|
||||
//判断目标窗口是不是子窗口,是返回1
|
||||
//<EFBFBD>ж<EFBFBD>Ŀ<EFBFBD>괰<EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>1
|
||||
int WIN_CheckChidWin (WIN_WindowStruct *win,WIN_WindowStruct *chid)
|
||||
{
|
||||
for (int i=0;i<win->chidWinNum;i++)
|
||||
@@ -464,7 +464,7 @@ int WIN_CheckChidWin (WIN_WindowStruct *win,WIN_WindowStruct *chid)
|
||||
}
|
||||
|
||||
|
||||
//找到指定窗口在屏幕上的坐标和大小
|
||||
//<EFBFBD>ҵ<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>С
|
||||
void WIN_GetWinPosOnLcd (WIN_WindowStruct *win,int *x,int *y,int *x_size,int *y_size)
|
||||
{
|
||||
*x=0;
|
||||
@@ -472,7 +472,7 @@ void WIN_GetWinPosOnLcd (WIN_WindowStruct *win,int *x,int *y,int *x_size,int *y_
|
||||
*x_size=win->x_size;
|
||||
*y_size=win->y_size;
|
||||
|
||||
//遍历父窗口获得窗口的实际屏幕坐标
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD>ڵ<EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
WIN_WindowStruct *t=win;
|
||||
do{
|
||||
*x+=t->x;
|
||||
@@ -488,12 +488,12 @@ void WIN_GetWinPosOnLcd (WIN_WindowStruct *win,int *x,int *y,int *x_size,int *y_
|
||||
|
||||
|
||||
|
||||
//阻塞窗口运行结束时设置返回值
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
void WIN_SetBlockWinReturn (int ret,void *data,int datasize)
|
||||
{
|
||||
g_win_struct.BlockWinReturn=ret;
|
||||
|
||||
//上个阻塞窗口的数据没有读取,这里丢弃掉
|
||||
//<EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ж<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﶪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (g_win_struct.BlockWinData) myfree(g_win_struct.BlockWinData);
|
||||
if (data&&datasize)
|
||||
{
|
||||
@@ -507,8 +507,8 @@ void WIN_SetBlockWinReturn (int ret,void *data,int datasize)
|
||||
g_win_struct.BlockWinDataSize=0;
|
||||
}
|
||||
|
||||
//调用了这个函数之后窗口返回
|
||||
//这里执行窗口栈出栈
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD>ջ
|
||||
if (g_win_struct.BlockWinNum)
|
||||
{
|
||||
g_win_struct.BlockWinNum--;
|
||||
@@ -520,7 +520,7 @@ void WIN_SetBlockWinReturn (int ret,void *data,int datasize)
|
||||
}
|
||||
}
|
||||
|
||||
//获取阻塞窗口的数据
|
||||
//<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int WIN_GetBlockWinReturn (int *ret,void *buff,int buffsize)
|
||||
{
|
||||
int size=buffsize;
|
||||
@@ -531,7 +531,7 @@ int WIN_GetBlockWinReturn (int *ret,void *buff,int buffsize)
|
||||
{
|
||||
mymemcpy (buff,g_win_struct.BlockWinData,size);
|
||||
myfree(g_win_struct.BlockWinData);
|
||||
//解决free(g_win_struct.BlockWinData)之后在函数WIN_SetBlockWinReturn再次free的bug
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>free(g_win_struct.BlockWinData)֮<EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>WIN_SetBlockWinReturn<EFBFBD>ٴ<EFBFBD>free<EFBFBD><EFBFBD>bug
|
||||
//2020.8.3
|
||||
g_win_struct.BlockWinData=0;
|
||||
}
|
||||
@@ -547,19 +547,19 @@ int WIN_GetBlockWinReturn (int *ret,void *buff,int buffsize)
|
||||
|
||||
|
||||
|
||||
//返回基础窗口指针
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
WIN_WindowStruct *WIN_GetBaseWindow(void)
|
||||
{
|
||||
return &WIN_GetWinStruct()->baseWin;
|
||||
}
|
||||
|
||||
//返回最后一次运行的窗口
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĴ<EFBFBD><EFBFBD><EFBFBD>
|
||||
WIN_WindowStruct *WIN_GetCurrentWindow(void)
|
||||
{
|
||||
return WIN_GetWinStruct()->winCurrent;
|
||||
}
|
||||
|
||||
//找到顶端可控窗口
|
||||
//<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ɿش<EFBFBD><EFBFBD><EFBFBD>
|
||||
WIN_WindowStruct *WIN_FindTopWin(WIN_WindowStruct *win)
|
||||
{
|
||||
WIN_WindowStruct *ret=0;
|
||||
@@ -572,14 +572,14 @@ WIN_WindowStruct *WIN_FindTopWin(WIN_WindowStruct *win)
|
||||
if (ret) return ret;
|
||||
}
|
||||
}
|
||||
//本窗口接受消息处理并且不是子窗口
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD>
|
||||
if (win&&(win->keyShield==0)&&(win->keyChid==0))
|
||||
return win;
|
||||
else return 0;
|
||||
}
|
||||
|
||||
|
||||
//查找win是否被遮挡,是,返回1
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>win<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
||||
int WIN_FindBlock(WIN_WindowStruct *win)
|
||||
{
|
||||
RECT_Struct r1={0};
|
||||
@@ -587,7 +587,7 @@ int WIN_FindBlock(WIN_WindowStruct *win)
|
||||
WIN_WindowStruct *top=0;
|
||||
WIN_WindowStruct *base=win->baseWin;
|
||||
|
||||
//该窗口被遮挡只可能是其子窗口和其同辈父辈窗口
|
||||
//<EFBFBD>ô<EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD>ڵ<EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (int i=0;i<win->chidWinNum;i++)
|
||||
{
|
||||
top=win->chidWin[i];
|
||||
@@ -607,8 +607,8 @@ int WIN_FindBlock(WIN_WindowStruct *win)
|
||||
top=base->chidWin[i-1];
|
||||
if(top==win)
|
||||
{
|
||||
//只比较在此窗口之前的窗口
|
||||
//若没有被遮挡,则继续判断其父窗口是否被遮挡
|
||||
//ֻ<EFBFBD>Ƚ<EFBFBD><EFBFBD>ڴ˴<EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD>û<EFBFBD>б<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>丸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
||||
win=base;
|
||||
break;
|
||||
}
|
||||
@@ -627,7 +627,7 @@ int WIN_FindBlock(WIN_WindowStruct *win)
|
||||
|
||||
|
||||
|
||||
//屏蔽和接触屏蔽子窗口的按键和键盘消息
|
||||
//<EFBFBD><EFBFBD><EFBFBD>κͽӴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD>ڵİ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
int WIN_SetChildWinkeyShield (WIN_WindowStruct *win,int power)
|
||||
{
|
||||
for (int i=win->chidWinNum-1;i>=0;i--)
|
||||
@@ -642,7 +642,7 @@ int WIN_SetChildWinkeyShield (WIN_WindowStruct *win,int power)
|
||||
|
||||
|
||||
|
||||
//通过指定的坐标找到顶端可控的窗口,没找到返回0
|
||||
//ͨ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ɿصĴ<EFBFBD><EFBFBD><EFBFBD>,û<>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>0
|
||||
WIN_WindowStruct *WIN_FindTopWinByPos (WIN_WindowStruct *win,int x,int y)
|
||||
{
|
||||
WIN_WindowStruct *ret=win;
|
||||
@@ -657,28 +657,28 @@ WIN_WindowStruct *WIN_FindTopWinByPos (WIN_WindowStruct *win,int x,int y)
|
||||
if (((x>=win_x_s)&&(x<win_x_s+x_size))&&
|
||||
((y>=win_y_s)&&(y<win_y_s+y_size))&&(win->keyShield==0))
|
||||
{
|
||||
//在本窗口内,查找是否有子窗口
|
||||
//从最后开始查找,因为越最后的显示在越前面
|
||||
//<EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD>ΪԽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>Խǰ<EFBFBD><EFBFBD>
|
||||
for (int i=win->chidWinNum-1;i>=0;i--)
|
||||
{
|
||||
t=WIN_FindTopWinByPos (win->chidWin[i],x,y);
|
||||
if (t)
|
||||
{
|
||||
ret=t;//找到了最前面的窗口
|
||||
ret=t;//<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//指定点不在本窗口之类
|
||||
//ָ<EFBFBD><EFBFBD><EFBFBD>㲻<EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD>
|
||||
ret=0;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
//返回两个窗口的共同父窗口,没有共同父窗口返回0
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĹ<EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>û<EFBFBD>й<EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD>0
|
||||
WIN_WindowStruct *WIN_FindPrent (WIN_WindowStruct *win1,WIN_WindowStruct *win2)
|
||||
{
|
||||
while ((win1)&&(win2))
|
||||
@@ -693,7 +693,7 @@ WIN_WindowStruct *WIN_FindPrent (WIN_WindowStruct *win1,WIN_WindowStruct *win2)
|
||||
|
||||
|
||||
|
||||
//设置窗口标题
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD>
|
||||
void WIN_SetWinTitle (WIN_WindowStruct *win,char *title)
|
||||
{
|
||||
int len=strlen(title);
|
||||
@@ -706,8 +706,8 @@ void WIN_SetWinTitle (WIN_WindowStruct *win,char *title)
|
||||
}
|
||||
|
||||
|
||||
//根据窗口标题找到窗口指针
|
||||
//深度优先搜索
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
WIN_WindowStruct *WIN_GetWinByTitle (WIN_WindowStruct *win,char *title)
|
||||
{
|
||||
WIN_WindowStruct *ret=0;
|
||||
@@ -748,7 +748,7 @@ WIN_WindowStruct *WIN_GetWinByTitle (WIN_WindowStruct *win,char *title)
|
||||
|
||||
|
||||
|
||||
//根据窗口坐标设置LCD的活动窗口,所有绘制操作都在这个窗口之内
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LCD<EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>л<EFBFBD><D0BB>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>
|
||||
void WIN_EnterPaint (WIN_WindowStruct *win)
|
||||
{
|
||||
int x=0;
|
||||
@@ -761,7 +761,7 @@ void WIN_EnterPaint (WIN_WindowStruct *win)
|
||||
WIN_GetWinStruct()->lcd->setWindow(x,y,x_size,y_size);
|
||||
}
|
||||
|
||||
//设置无效区矩形,此矩形会被限制在窗口无效区之内
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD>˾<EFBFBD><EFBFBD>λᱻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD>
|
||||
void WIN_SetWinInvalidRect (WIN_WindowStruct *win,RECT_Struct *r)
|
||||
{
|
||||
if (r==0) r=&win->invaldRect;
|
||||
@@ -780,7 +780,7 @@ void WIN_SetWinInvalidRect (WIN_WindowStruct *win,RECT_Struct *r)
|
||||
|
||||
|
||||
|
||||
//获取窗口无效区矩形
|
||||
//<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void WIN_GetWinInvalidRect (WIN_WindowStruct *win,RECT_Struct *r)
|
||||
{
|
||||
r->x=g_win_struct.Invalid_x;
|
||||
@@ -792,7 +792,7 @@ void WIN_GetWinInvalidRect (WIN_WindowStruct *win,RECT_Struct *r)
|
||||
|
||||
|
||||
|
||||
//在窗口绘制时,判断需不需要绘制顶端窗口
|
||||
//<EFBFBD>ڴ<EFBFBD><EFBFBD>ڻ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>費<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD>
|
||||
void WIN_TopWinPaint (WIN_WindowStruct *win)
|
||||
{
|
||||
RECT_Struct r1={0};
|
||||
@@ -804,7 +804,7 @@ void WIN_TopWinPaint (WIN_WindowStruct *win)
|
||||
WIN_GetWinPosOnLcd (g_win_struct.TopWin[i],&r2.x,&r2.y,&r2.x_size,&r2.y_size);
|
||||
if (POS_RectIntersection (&rout,&r1,&r2)==1)
|
||||
{
|
||||
//需要刷新顶端窗口
|
||||
//<EFBFBD><EFBFBD>Ҫˢ<EFBFBD>¶<EFBFBD><EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD>
|
||||
WIN_SetInvalidRect (g_win_struct.TopWin[i],rout.x-r2.x,rout.y-r2.y,rout.x_size,rout.y_size);
|
||||
}
|
||||
}
|
||||
@@ -813,7 +813,7 @@ void WIN_TopWinPaint (WIN_WindowStruct *win)
|
||||
|
||||
|
||||
|
||||
//窗口默认的绘制函数
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵĻ<EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD>
|
||||
void WIN_DefaultPaint (WIN_WindowStruct *win)
|
||||
{
|
||||
WIN_PaintBackGround (win);
|
||||
@@ -826,20 +826,20 @@ void WIN_DefaultPaint (WIN_WindowStruct *win)
|
||||
|
||||
}
|
||||
|
||||
//显示窗口
|
||||
//<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void WIN_ShowWindow (WIN_WindowStruct *win)
|
||||
{
|
||||
//把窗口设置为无效,
|
||||
//<EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
|
||||
WIN_SetInvalid (win);
|
||||
|
||||
//通过运行一遍消息循环来显示
|
||||
//ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
// WIN_Working (win);
|
||||
}
|
||||
|
||||
//绘制背景
|
||||
//<EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD>
|
||||
void WIN_PaintBackGround (WIN_WindowStruct *win)
|
||||
{
|
||||
//如果有图片就显示图片
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾͼƬ
|
||||
WIN_SetLcdBkColor(win->bkcolor);
|
||||
WIN_PicStruct *pic=0;
|
||||
|
||||
@@ -873,7 +873,7 @@ void WIN_SetBkColor (WIN_WindowStruct *win,u32 bkcolor)
|
||||
|
||||
|
||||
|
||||
//设置页面的背景图片路径
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>ͼƬ·<EFBFBD><EFBFBD>
|
||||
void WIN_SetBackPicPath (WIN_WindowStruct *win,char *path)
|
||||
{
|
||||
if (path)
|
||||
@@ -895,7 +895,7 @@ void WIN_SetBackPicPath (WIN_WindowStruct *win,char *path)
|
||||
}
|
||||
|
||||
|
||||
//设置页面的背景图片
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>ͼƬ
|
||||
void WIN_SetBackPic (WIN_WindowStruct *win)
|
||||
{
|
||||
WIN_PicStruct pic={0};
|
||||
@@ -921,7 +921,7 @@ void WIN_SetBackPic (WIN_WindowStruct *win)
|
||||
|
||||
|
||||
|
||||
//设置页面的画背景函数
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void *WIN_SetBackFun (WIN_WindowStruct *win,void (*fun)(void))
|
||||
{
|
||||
void *ret=win->drawBackPic;
|
||||
|
Reference in New Issue
Block a user