Advertisement
MARSHAL327

Untitled

Nov 15th, 2019
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. // ==========ШАБЛОН ПЕЧАТИ МЕНЮ==========
  2. void print_menu(int sym, const string items[]) {
  3.     const int N_ITEMS = 5;
  4.  
  5.     //========================
  6.     //========================
  7.     //========================
  8.     HANDLE hCon;
  9.     COORD cPos;
  10.     int width = 0, height = 0;
  11.  
  12.     // вытакиваем ширину и высоту
  13.     hCon = GetStdHandle(-12);
  14.     CONSOLE_SCREEN_BUFFER_INFO consoleInfo;
  15.     if (GetConsoleScreenBufferInfo(hCon, &consoleInfo))
  16.     {
  17.         width = consoleInfo.srWindow.Right - consoleInfo.srWindow.Left + 1;
  18.         height = consoleInfo.srWindow.Bottom - consoleInfo.srWindow.Top + 1;
  19.     }
  20.  
  21.     // меняем положение меню
  22.     hCon = GetStdHandle(STD_OUTPUT_HANDLE);
  23.     cPos.Y = 15;
  24.     cPos.X = 0;
  25.     SetConsoleCursorPosition(hCon, cPos);
  26.  
  27.     // меняем размер шрифта
  28.     CONSOLE_FONT_INFOEX cfi;
  29.     cfi.cbSize = sizeof(cfi);
  30.     cfi.nFont = 0;
  31.     cfi.dwFontSize.X = 0;                   // Width of each character in the font
  32.     cfi.dwFontSize.Y = 24;                  // Height
  33.     cfi.FontFamily = FF_DONTCARE;
  34.     cfi.FontWeight = FW_NORMAL;
  35.     SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
  36.     //========================
  37.     //========================
  38.     //========================
  39.     for (int i = 1; i <= N_ITEMS; i++) {
  40.  
  41.         SetColor(7, 0);
  42.         cout << "                                             ";
  43.         if (i == sym) {
  44.             SetColor(7, 5);
  45.         }
  46.         cout << items[i - 1] << endl;
  47.         SetColor(7, 0);
  48.     }
  49. }
  50.  
  51. // ==========МЕНЮ==========
  52. int menu(int& active, const string items[]) {
  53.     wint_t buf;
  54.  
  55.     do {
  56.         cls();
  57.         print_menu(active, items);
  58.  
  59.         buf = _getwch();
  60.         switch (buf) {
  61.         case up: // клавиша вверх
  62.             if (active > 1) active--;
  63.             break;
  64.         case down: // клавиша вниз
  65.             if (active < 5) active++;
  66.             break;
  67.         case enter: // клавиша enter
  68.             return active;
  69.         case esc: // клавиша escape
  70.             return 5;
  71.         }
  72.     } while (1);
  73. }
  74.  
  75. // ==========УСТАНОВКА ЦВЕТА ТЕКСТА И ФОНА==========
  76. void SetColor(int text, int bg) {
  77.     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
  78.     SetConsoleTextAttribute(hStdOut, (WORD)((bg << 4) | text));
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement