Proste menu konsolowe w C++ oparte on WinAPI. Program w pętli pobiera znak z klawiatury i w zależności od aktualnej wartości zmiennej "pozycja" podświetla wybraną pozycję menu. Po wybraniu odpowiedniej pozycji i zatwierdzeniu enterem wywołuje przypisaną funkcję dla danej pozycji. Działa także dla wyboru liczbowego, tj. kiedy użytkownik kliknie cyfrę z podanego przedziału, również uruchamiana jest pożądana funkcja.
Oczywiście musimy użyć biblioteki windowsowej:
#include <windows.h>
oraz zadeklarować zmienną globalną "pozycja" oraz przypisać jej wartość początkową, aby od razu po uruchomieniu programu podświetliła się np. pierwsza pozycja
int pozycja =1;
Listing
do{
if(znak == 72 && pozycja > 1) pozycja--;
if(znak == 80 && pozycja < 9) pozycja++;
system("cls");
header();
cout << " Wybierz zadanie do uruchomienia:" << endl;
//pozycja 1
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
cout << " [1] ";
if(pozycja == 1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),240);
cout << "Pozycja 1" << endl;
//pozycja 2
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
cout << " [2] ";
if(pozycja == 2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),240);
cout << "Pozycja 2" << endl;
//pozycja 3
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
cout << " [3] ";
if(pozycja == 3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),240);
cout << "Pozycja 3" << endl;
//pozycja 4
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
cout << " [4] ";
if(pozycja == 4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),240);
cout << "Pozycja 4" << endl;
//pozycja 5
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
cout << " [5] ";
if(pozycja == 5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),240);
cout << "Pozycja 5" << endl;
//pozycja 6
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
cout << " [6] ";
if(pozycja == 6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),240);
cout << "Pozycja 6" << endl;
//pozycja 7
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
cout << " [7] ";
if(pozycja == 7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),240);
cout << "Pozycja 7" << endl;
//pozycja 8
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
cout << " [8] ";
if(pozycja == 8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),240);
cout << "Pozycja 8" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
cout << endl;
//pozycja 9 (wyjście z programu)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
cout << " [0] ";
if(pozycja == 9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),240);
cout << "Wyjdz z programu" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
znak=getch();
}
while(znak != 72 && znak != 80 && znak != 13 && znak != 27 && znak < 48 && znak > 56) ;
// wywoływanie odpowiedniej funkcji zadania po naciśnięciu klaiwsza enter
if((pozycja == 1 && znak == 13) || znak == 49) f1();
if((pozycja == 2 && znak == 13) || znak == 50) f2();
if((pozycja == 3 && znak == 13) || znak == 51) f3();
if((pozycja == 4 && znak == 13) || znak == 52) f4();
if((pozycja == 5 && znak == 13) || znak == 53) f5();
if((pozycja == 6 && znak == 13) || znak == 54) f6();
if((pozycja == 7 && znak == 13) || znak == 55) f7();
if((pozycja == 8 && znak == 13) || znak == 56) f8();
if(znak == 27 || znak == 48 || (pozycja == 9 && znak == 13)) return 1; //jeżeli użytkownik nacisnie klawisz ESC zwróć 1