[C/C++] - Menu Podswietlane

0

Jak zrobić w C++ menu takie jak przy wcisnieciu F8 podczas uruchamiania Windowsa - z polami wyboru i podswietlanymi paskami - w konsoli DOS !!
Dzieki

0

np. tak:

#include <iostream>
#include <windows.h>

using namespace std;

int menu(char ** teksty, int ile);

int main()
{
  char * opcje1[] = {"Opcja 1", "Opcja 2", "Opcja 3", "Wyjscie"};
  char * opcje2[] = {"Opcja 1234", "Powrot"};
  while (1)
  switch ( menu(opcje1, 4) )
  {
   case 4:
    return 0;
   case 2:
    while (menu(opcje2, 2) != 2)
     Beep(1000, 200);
    break;
   default:
    Beep(1000, 200);
  }
}

int menu(char ** teksty, int ile)
{
  static HANDLE h_we = GetStdHandle(STD_INPUT_HANDLE),
                h_wy = GetStdHandle(STD_OUTPUT_HANDLE);
  int wybor = 1;
  CONSOLE_CURSOR_INFO cci = {0};
  GetConsoleCursorInfo(h_wy, &cci);
  cci.bVisible = false;
  SetConsoleCursorInfo(h_wy, &cci);
  COORD p = {0};
  DWORD k;
  FillConsoleOutputAttribute(h_wy, 0x07, 80 * 25, p, &k);
  FillConsoleOutputCharacter(h_wy, 0x20, 80 * 25, p, &k);
  while(1)
  {
    INPUT_RECORD ipr = {0};
    DWORD p = 0;
    for (int i = 0; i < ile; i++)
    {
      COORD poz = {2, 5 + i};
      DWORD p;
      SetConsoleCursorPosition(h_wy, poz);
      SetConsoleTextAttribute(h_wy, (wybor == i + 1) ? 0x80 : 0x08);
      cout << teksty[i];
    }
    if (ReadConsoleInput(h_we, &ipr, 1, &p) && p == 1 &&
        ipr.EventType == KEY_EVENT && ipr.Event.KeyEvent.bKeyDown)
     switch (ipr.Event.KeyEvent.wVirtualKeyCode)
     {
       case VK_UP:
        wybor = (wybor == 1) ? ile : wybor - 1;
        break;
       case VK_DOWN:
        wybor = (wybor == ile) ? 1 : wybor + 1;
        break;
       case VK_RETURN:
        cci.bVisible = true;
        SetConsoleCursorInfo(h_wy, &cci);
        return wybor;
     }
  }
}
0

jaaaa ..........

1 użytkowników online, w tym zalogowanych: 0, gości: 1