Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Die Maus und ncurses...



ContainerDriver
19-02-2003, 11:24
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:



#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

ReSeT
20-02-2003, 10:14
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.



#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

ContainerDriver
26-02-2003, 10:39
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

ReSeT
03-03-2003, 09:57
Hi Florian!

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

http://www.tldp.org/HOWTO/NCURSES-Programming-HOWTO/mouse.html#MOUSEBASICS

und dann anschliessend nochmal fragst, falls Unklarheiten bestehen.

;)

GreetZ

ReSeT