//******************************************************************************** //菜单选择 //******************************************************************************** int SelectMenu (char * menuString, int menuCount, int linePtr) { int keych; typ_msg_word msg;
if (linePtr >= menuCount) linePtr = 0; if (linePtr < 4) { DispMenu(menuString, menuCount, linePtr); if (menuCount > 4) { ClearArrowArea(); PutArrowDownChar(120, 48); } } else { DispMenu((char *)(menuString + (linePtr - 3) * 16), menuCount - linePtr + 3, 3); ClearArrowArea(); PutArrowUpChar(120, 0); if (menuCount - linePtr > 1) PutArrowDownChar(120, 48); }
while(1) { msg.s_word = sys_msg(SM_GOTO_SLEEP);
if (msg.bits.key_available) { keych = KEY_read(); keych = Key_Utility[keych]; switch(keych) { case KEY_AUX4: linePtr --; if (linePtr < 0) linePtr = menuCount - 1; if (linePtr < 4) { DispMenu(menuString, menuCount, linePtr); if (menuCount > 4) { ClearArrowArea(); PutArrowDownChar(120, 48); } } else { DispMenu((char *)(menuString + (linePtr - 3) * 16), menuCount - linePtr + 3,
3); ClearArrowArea(); PutArrowUpChar(120, 0); if (menuCount - linePtr > 1) PutArrowDownChar(120, 48); } break; case KEY_AUX3: linePtr ++; if (linePtr > menuCount - 1) linePtr = 0; if (linePtr < 4) { DispMenu(menuString, menuCount, linePtr); if (menuCount > 4) { ClearArrowArea(); PutArrowDownChar(120, 48); } } else { DispMenu((char *)(menuString + (linePtr - 3) * 16), menuCount - linePtr + 3,
3); ClearArrowArea(); PutArrowUpChar(120, 0); if (menuCount - linePtr > 1) PutArrowDownChar(120, 48); } break; case KEY_ENTER: return linePtr; case KEY_POWER: return -2; case KEY_CLR: return -1; case KEY_F1: return -11; case KEY_F2: return -12; case KEY_F3: return -13; default: if (keych > 0 && keych <= menuCount) return keych - 1; break; } } } }
static void DispMenu (char * menuString, int lineCount, int linePtr) { int q, x;
clear_console();
for (q = 0; q < 4; q ++) { if (q == linePtr) x = DISP_POSITION | DISP_REVERSE; else x = DISP_POSITION;
if (q < lineCount) DispStr_CE(0, q * 2, menuString + q * 16, x); } }
static void PutArrowDownChar(int x, int y) { int m, n;
for(m = 0; m < 4; m ++) { for(n = m; n < 7 - m ; n ++) put_pixel(x + n + 1, y + m + 11, 1, DISP_PUT_MODE_PUT); } } static void PutArrowUpChar(int x, int y) { int m, n;
for(m = 0; m < 4; m ++) { for(n = 4 - m; n < 5 + m ; n ++) put_pixel(x + n, y + m + 1, 1, DISP_PUT_MODE_PUT); } }
static void ClearArrowArea(void) { int m, n;
for(m = 1; m < 8; m ++) { for(n = 0; n < 64 ; n ++) put_pixel(120 + m, n, 0, DISP_PUT_MODE_PUT); } }
转载于:https://www.cnblogs.com/nanshouyong326/archive/2009/03/11/1408660.html
