1.以下为lcd屏幕上绝对地址
pWin->Rect.x0 = x0;
pWin->Rect.y0 = y0;
pWin->Rect.x1 = x0 + width - 1;
pWin->Rect.y1 = y0 + height - 1;
2.所有窗体都会被_AddToLinList()函数添加到单向链表
WM__FirstWin、WM__FirstWin->hNextLin中.
3.函数WM_InvalidateArea将搜索窗体链表WM__FirstWin中链接的所有窗体,
计算对应窗体的失效矩形区pWin->InvalidRect
4.函数WM_InvalidateWindow(WM_HWIN hWin, const GUI_RECT*pRect)
其中pRect为相对本窗体坐标的矩形,
所以与其他窗体进行矩形剪切计算时,需要使用WM__Client2Screen()函数
将相对窗体的矩形区,转换成相对screen的矩形区,
该函数将与hwin的所有parent的boader进行矩形剪切,
之后调用_Invalidate1Abs将失效矩形区域存储到pWin->InvalidRect
5.函数WM__InsertWindowIntoListt(WM_HWIN hWin, WM_HWIN hParent);
hWin为普通窗体:将hWin插入到hParent下所有普通窗体之后,第一个on_top类型窗体之前
hWin为on_top :将hWin插入到hParent下所有窗体最后.
具体细节参考《μC/GUI-v3.90a窗体hParent内部控件窗体之间单向链接图》[http://gliethttp.cublog.cn]
6.函数WM_SelectWindow(WM_HWIN hWin);
将选择hWin为最前端待绘制窗体,同时使用函数LCD_SetClipRectMax()
使GUI_Context.ClipRect矩形区设为screen大小,与此同时设置
GUI_Context.xOff = pObj->Rect.x0;//为hwin的左上角坐标x0
GUI_Context.yOff = pObj->Rect.y0;//为hwin的左上角坐标y0
7.函数WM_BringToBottom(WM_HWIN hWin);//将hwin置底
将hWin->hNext从单向链表中摘除,作为hParent的窗体链表中的第一个孩子
即:pParent->hFirstChild = hWin,
同时将单向链表WM__FirstWin中ucgui系统中当前创建的所有窗体的InvalidRect矩形区域
重新进行进行计算.
阅读(2218) | 评论(0) | 转发(1) |