Loading:

Promocja Helion.pl

Podświetlane menu konsolowe z obsługą strzałek

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; 



Napisz Artykuł

Listing

 char znak;
     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


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=12819

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: bari Ranga: Poziom 8 Punktów: 250
Komentarze użytkowników
    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors