hd6305 menu

it2022-05-09  23

//******************************************************************************** //菜单选择 //******************************************************************************** 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


最新回复(0)