Probleme mit wgetch(win)



  • Guten Abend und ein frohes rest Fest erstmal.

    Ich bin dabei eine Oberfläche zuschreiben, in der später auch eine Steuerung für eine Platine eingebaut wird.
    Mein Problem zurzeit ist das ich ein zusatz Fenster öffne , in diesem Fall Jalousie
    und ich da weiter Auswahlen habe.
    Aber z.b soll mit der ESC-taste erst die Oberfläche beendet werden wenn nur das hauptfenster noch da ist. Aber wgetch(wha) reaagiert auch wenn das Fenszer für Jaloussie auf ist wgecth(wja).
    Kann mir jemand da etwas helfen ?

    Mfg Michael

    //*******  g++ -Wall -lncurses -lpanel -o menu menu.cc
    #include <panel.h>
    #include <curses.h>
    #include <iostream>
    #include <stdlib.h>
    #include <ctime>
    //#include <bwctmb/bwctmb.h>
    
    using namespace std;
    
    //******** speicherfrage der panel/fenster ********
    WINDOW *whaupt, *wjalousie, *whinter, *win4, *win5;
    PANEL  *phaupt, *pjalousie, *phinter, *pan4, *pan5;
    
    void ende()
    {
    	del_panel(phaupt);
    	del_panel(phinter);
    	delwin(whaupt);
    	delwin(whinter);
    	endwin();
    	cout <<"Programm Beemdet durch Benutzer\n";
    }
    
    //********************** Zeitabfrage und umwandeln ************************
    void uhrzeit()
    {
    	time_t zeit = time(NULL);
    	tm *p_zeit = localtime(&zeit);
    	char lzeit[80]; //stellt lzeit 80 zeichen zu verfügung
    	strftime (lzeit, sizeof(lzeit),
    	"Es ist der %d %b %Y und %H:%M:%S",p_zeit); //schreibt string in lzeit
    	mvwaddstr (whinter, 23, 44, lzeit);  
    }
    //************************** Hauptmenue ************************************ 
    void haupt ()
    {
    	whaupt = newwin (20, 79, 2, 0);
    	box(whaupt, ACS_VLINE, ACS_HLINE);
    	phaupt = new_panel(whaupt);
    	keypad(whaupt, TRUE);
    	nodelay(whaupt, TRUE);
    	wbkgd(whaupt, COLOR_PAIR(3));
    	mvwaddstr(whaupt, 1, 5, "1 = Jalousiesteuerung");
    	mvwaddstr(whaupt, 2, 5, "2 = Heizungssteuerung");
    	mvwaddstr(whaupt, 3, 5, "3 = Lichtsteuerung");
    	mvwaddstr(whaupt, 4, 5, "4 = Steckdosensteuerung");
    	mvwaddstr(whaupt, 5, 5, "5 = Gartenbewaesserung");
    	mvwaddstr(whaupt, 6, 5, "6 = Aussenbeleuchtung");
    	update_panels();
    	doupdate();
    }
    
    //************************** Jalousiemenue *********************************
    void jalousie ()
    {
    	wjalousie = newwin (12, 30, 3, 40);//****** 10 Zeilen, 30 Spalten, y, x ******
    	box(wjalousie, ACS_VLINE, ACS_HLINE);//**** Zeichnet Box um Win ******
    	pjalousie = new_panel(wjalousie);
    	wbkgd(wjalousie, COLOR_PAIR(2));
    	keypad(wjalousie, TRUE); //*** Kursor-Funktion-Sondertasten ein
    	nodelay(wjalousie, TRUE); //*** wgetch ERR ein wenn kein Zeichen anliegt
    	mvwaddstr(wjalousie, 1, 2, "1 = Jalousie Schlafzimmer");
    	mvwaddstr(wjalousie, 2, 2, "2 = Jalousie Wohnzimmer");
    	mvwaddstr(wjalousie, 3, 2, "3 = Jalousie Badezimmer");
    	mvwaddstr(wjalousie, 4, 2, "4 = Jalousie Flur oben");
    	mvwaddstr(wjalousie, 5, 2, "5 = Jalousie Flur unten");
    	mvwaddstr(wjalousie, 6, 2, "6 = Jalousie Buero");
    	mvwaddstr(wjalousie, 7, 2, "7 = Jalousie Kueche");
    	mvwaddstr(wjalousie, 8, 2, "8 = Jalousie allgemein");
    	mvwaddstr(wjalousie, 10, 2, "Enter = Fenster schliesen");
    }
    
    //****************************** Auswahl *****************************
    void auswahl()
    {	
    
    	int wha, wja;
    	while (1)
    	{
    	 wja = wgetch(wjalousie);
    	 wha = wgetch(whaupt);
    	 if (wha == 27) break; //ESC-taste
    	 if (wha == 49) {jalousie();}
    	 if (wja == '\n') {del_panel(pjalousie); delwin(wjalousie);}
    	 if (wja == 49) {mvwaddstr(whaupt, 15, 2, "Taste1");}
    	 if (wja == 50) {mvwaddstr(whaupt, 15, 2, "Taste2");}
    
    	 uhrzeit();
    //	 update_panels();
    //	 doupdate();
    	}
    }
    
    int main()
    {
    	initscr();
    	timeout(0);
    	atexit(ende); // ausgang
    	clear();
    	noecho();
    	curs_set(0); // cursor ausschalten
    	cbreak();
    	start_color();
    	init_pair(1, COLOR_BLUE, COLOR_BLACK); // Schrift Blau/Hintergund Schwarz
    	init_pair(2, COLOR_GREEN, COLOR_BLACK);
    	init_pair(3, COLOR_YELLOW, COLOR_BLACK); 
    
    	whinter = newwin (24,79,0,0);
    	phinter = new_panel(whinter);
    	keypad(whinter, TRUE);
    	nodelay(whinter, TRUE);
    	wbkgd(whinter, COLOR_PAIR(1));
    	wattrset (whinter, A_BOLD);
    	mvwaddstr(whinter, 0, 24, "Steuerungsmenue / Homecontroll");
    	mvwaddstr(whinter, 23, 0, "ESC um Oberflaeche zu beenden");
    	haupt();
    	auswahl();
    	return (0);
    }
    


  • Niemand de mir nen keinen tipp gibt ? ich möchte ja nicht gleich die Lösung haben
    🙂



  • Was ist das für ein Framework? Standard C++ ist es nicht.



  • Nun ich bin Anfänger , werde wohl c und c++ mischen


Anmelden zum Antworten