一种灵活的嵌入式软件架构(二)

2014-11-24 03:26:55 · 作者: · 浏览: 3
ude "pageWnd.h" /*===================================================== = =====================================================*/ char flagPaint = 0; void (* pOnPaint)(void) = 0; void (* pOnKey)(short) = 0; const char *pMenuStr; uchar menuSelect = 0; uchar menuLine = 0; uchar menuTop; TypePage *pageCurrent; TypePage *pageTreeTab[10]; uchar pageIndex = 0; /*===================================================== = =====================================================*/ void WndDrawMenu(void); /************************************************************************* * 函数原型: * 功能描述: * 入口参数: * 出口参数: * 返 回 值: *************************************************************************/ void WndPageSet(const TypePage *pg, int type) { if (pg == &pageMain) //防止出错 { pageIndex = 0; } else if (type == 0) { pageTreeTab[pageIndex++] = pageCurrent; } pageCurrent = (TypePage *)pg; pOnPaint = pg->OnPaint; pOnKey = pg->OnKey; flagPaint = 1; } /************************************************************************* * 函数原型: * 功能描述: * 入口参数: * 出口参数: * 返 回 值: *************************************************************************/ TypePage * WndGetPage(void) { return pageCurrent; } /************************************************************************* * 函数原型: * 功能描述: * 入口参数: * 出口参数: * 返 回 值: *************************************************************************/ void WndPageEsc(void) { TypePage *pg; if (pageIndex != 0) { pageIndex--; pg = pageTreeTab[pageIndex]; } else { pg = (TypePage *)&pageMain; } pageCurrent = pg; pOnPaint = pg->OnPaint; pOnKey = pg->OnKey; flagPaint = 1; } /************************************************************************* * 函数原型: * 功能描述: * 入口参数: * 出口参数: * 返 回 值: *************************************************************************/ void WndOnPaint(void) { if (flagPaint != 0) { flagPaint = 0; (*pOnPaint)(); } } /************************************************************************* * 函数原型: * 功能描述: * 入口参数: * 出口参数: * 返 回 值: *************************************************************************/ void WndOnKey(short key) { if (pOnKey != 0) { (*pOnKey)(key); } } /************************************************************************* * 函数原型: * 功能描述: * 入口参数: * 出口参数: * 返 回 值: *************************************************************************/ void WndMenuInit(const char *pmn, char mline) { menuSelect = 0; pMenuStr = pmn; menuLine = mline; menuTop = 0; WndDrawMenu(); } /************************************************************************* * 函数原型: * 功能描述: * 入口参数: * 出口参数: * 返 回 值: *************************************************************************/ void WndMenuSelet(int m) { //光标滑动 if (m >
0) //下移 { menuSelect++; if (menuSelect == menuLine) menuSelect = 0; if (menuSelect > menuTop + 4) { if (menuLine < menuTop + 4) menuTop = menuLine - 4; else menuTop = menuSelect - 4; } } else if (m < 0) //上移 { if (menuSelect == 0) menuSelect = menuLine - 1; else menuSelect--; } //图框移动 if (menuSelect < menuTop) //上移 { menuTop = menuSelect; } else if (menuSelect >= menuTop + 4) //下移 { menuTop = menuSelect - 3; } WndDrawMenu(); } /************************************************************************* * 函数原型: * 功能描述: * 入口参数: * 出口参数: * 返 回 值: *************************************************************************/ char WndMenuGetSelet(void) { return menuSe