Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Die Maus und ncurses...

  1. #1
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418

    Die Maus und ncurses...

    Hallo,
    ich habe ein kleines Problem.
    Ich will für mein Prog. eine GUI ertsellen und dazu ncurses benutzen.
    Da ich eine Mausunterstützung einbauen will habe ich es mit folgendem Programm versucht.
    Hier der Code:

    Code:
    #include <iostream.h>
    #include <curses.h>
    
    int main (void)
    {
      initscr ();
    
      WINDOW *mywin;
      mywin=newwin (LINES,COLS, 0,0);
    
      mmask_t maus(ALL_MOUSE_EVENTS);
    
      MEVENT mymouse;
    
      wrefresh (mywin);
    
      wgetch (mywin);
    
      if (getmouse (&mymouse)==OK)
      {
        cout << "OK" << endl;
      }
      else
      {
        cout << "Fehler" << endl;
      }
    
      //Routinen zum zerstören des Fensters....
      return 0;
    }
    So, wenn ich nun irgendwo hinklicke (im Terminal) passiert gar nichts.
    Wo ist der Fehler und wie lässt sich eine Mausunterstützung im Terminal realisieren (mit Hilfe von ncurses)?
    Der Aufruf von wenclose(mywin,*,*); gibt immer TRUE zurück.

    Vielen Dank schon mal für die Antwort,
    Florian
    Geändert von ReSeT (20-02-2003 um 09:48 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.02.2002
    Ort
    2nd level cache
    Beiträge
    90
    Hi!

    Das Problem besteht wohl darin, wie Du die Maus-Events maskiert hast und Standard-Ausgabe Funktionen wie cout verwendet hast. Unter Ncurses sollten nur die dafür bestimmten Ausgaberoutinen wie z.B. mvwprintw verwendet werden.

    So sollte es eigentlich funktionieren.

    Code:
    #include <stdio.h>
    #include <ncurses.h>
    
    int main ()
    {
      MEVENT mymouse;
      WINDOW *mywin;
      
      initscr ();
      noecho();
    
      mywin = newwin (LINES,COLS, 0,0);
    
      mousemask(ALL_MOUSE_EVENTS,NULL);
    
      do {
    
        wrefresh (mywin);
    
        wgetch (mywin);
    
        werase(mywin);
    
        if (getmouse (&mymouse)==OK)
        {
          mvwprintw(mywin,1,1,"OK\n");
        }
        else
        {
          mvwprintw(mywin,1,1,"Fehler\n");
        }
    
      } while (1);
    
      //Routinen zum zerstören des Fensters....
    
      endwin();
      echo();
    
      return 0;
    
    }
    btw: Bitte immer Code-Tags benutzen.

    Und noch ein Wort an die C++ Leute: Bitte wenn möglich die Reihenfolge von Deklaration und Initialisierung beachten und nicht mitten im Code Variablen definieren, auch wenn es unter C++ zugegebenermaßen erlaubt ist (vertehe bis heute nicht warum) erschwert es mir die Fehlersuche und ggf. die Portierung nach C doch immens.

    GreetZ

    ReSeT
    Einmal schwarzen Tee mit Milch und Zucker bitte!

  3. #3
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Ok, vielen Dank.
    Wenn ich jetzt zwar irgendwo hinklicke, dann gehts weiter, aber die x oder y Koordinaten kann ich mir tortzdem nicht anzeigen (mit *.y oder *.x).
    Wie macht man das jetzt wieder, dass da die Position reinkommt, wo man hingeklickt hat?

    Würde mich freuen wenn man mir das auch noch sagen könnte.

    MFG
    Florian
    Geändert von ContainerDriver (27-02-2003 um 10:20 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.02.2002
    Ort
    2nd level cache
    Beiträge
    90
    Hi Florian!

    Ich würde vorschlagen, daß Du Dich erstmal hiermit befasst:

    http://www.tldp.org/HOWTO/NCURSES-Pr...ml#MOUSEBASICS

    und dann anschliessend nochmal fragst, falls Unklarheiten bestehen.



    GreetZ

    ReSeT
    Einmal schwarzen Tee mit Milch und Zucker bitte!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •