PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Maus Klick



curdegn
27-11-2003, 19:45
Hallo,

Mit getchar() wartet ein c++ programm auf eine Tastatureingabe.
Kann man mit einem ähnlichen Befehl auf ein Maus-links-Klick warten (sozusagen ein getmouseleftklick())?

cucu

peschmae
27-11-2003, 21:30
afaik nein. Wäre auch nicht logisch denn [list=1]
gab es als C erstellt wurde keine Mäuse
laufen C-Programme auch in Umgebungen, die keine Mäuse kennen (z.B. die Shell (ok, s gibt n paar irre, die da die Maus benützen...), via remote-shell, etc)
gibt es für C/C++ keinen wirklich allgemeinen GUI-Standard (X unter Unix, Acqua unter OSX, Win-Wasweisich unter Windows)
kannst du verschiedenen Orten hinklicken, das sollte ja wohl meist eine Unterschiedliche reaktion zur Folge haben...
[/list=1]

vielleicht liesse sich da mit NCurses was anstellen, aber ich würd mir das noch mal überlegen.

Vor allem so lange du nicht verrätst, in welcher Umgebung das Programm läuft (Konsole, X, KDE, Gnome, ...)

MfG Peschmä

curdegn
06-12-2003, 14:03
Vielen Dank für die Antwort.

Mein kleines Konsole C++ Programm steuert den Mplayer. Dieser spielt eine Diashow welche immer wieder an vordefinierten Stellen anhaltet (damit man auch was zum Bild sage kann). Es wäre nun nett wenn ich wärend der Präsentation statt mit ENTER mit einem MAUSKLICK zum nächten Bild schalten könnte (kabellose Maus).

cucu

peschmae
06-12-2003, 14:57
ah, hmm

das sollte sich wohl irgendwie über eine x-bibliothek machen lassen. Allerdings habe ich keine Ahnung wie - habe noch nie ne gute Doku zu sowas gefunden.

MfG Peschmä

anda_skoa
06-12-2003, 15:57
Maus auf der Konsole läuft normalerweise über gpm.
http://www.linuxjournal.com/article.php?sid=4600

Ciao,
_

peschmae
06-12-2003, 21:39
ja, aber er hat doch X laufen dabei.

Da müsste er sich doch irgendwie in den X-Server hooken und alle Mausevents abfangen...

MfG Peschmä

anda_skoa
07-12-2003, 14:54
Original geschrieben von peschmae
ja, aber er hat doch X laufen dabei.


Hmm, seh nirgends, dass das der Fall ist.
Zumindest nicht in diesem Thread.

Ciao,
_

peschmae
07-12-2003, 15:02
hmm, ok

Mplayer kann offenbar auch nicht unter X laufen.

MfG Peschmä

curdegn
10-12-2003, 21:16
Hallo,
dann versuche ich mal für Klarheit zu sorgen.

Sinn und Zweck:
Wir sind fünf Bergsteiger die letzten Sommer in den Anden Perus unterwegs waren (www.senda.ch). Nun haben wir eine Präsentation (Bilder, Überblendungen, Zooms, vertonte Bildersequenzen und Kurzfilme) unserer Erlebnisse zusammengestellt.

Warum nicht OO-Impress, Powerpoint u.ä:
Qualitativ schlechte Überblendungen, keine vertonte Bildersequenzen (Ton genau mit Bilder synchronisiert) möglich und bei OO kein Einbinden von Filmen möglich.

Wie ichs gemacht habe
Die ganze Diashow ist ein Film, gerendert mit cinelerra. Jedes Bild ist genau 3 Sekunden zu sehen. So lassen sich sehr einfach viele Effekte einbauen und insbesondere ist das 1/25 sek. genaue Vertonen der Schow sehr konfortabel. Das Ganze wird vom Mplayer abgespielt wobei immer wieder "PAUSE" gedrückt werden muss. Ein Bildwechsel sieht also so aus: Pause aufheben - 3 Sekunden warten bis das Bild Wechselt (Überblendungen bzw. Filmsequenzen brauchen entsprechend länger) - Film wieder Pausieren. Dies ist während einer Präsentation sehr mühsam. Man wünscht sich einfach ENTER (oder noch besser die linke Maustaste) drüchen zu können und der Film sollte an der richtigen Stelle nach dem Bildwechsel wieder anhalten. Genau das macht mein C++ Programm.

Das C++ Programm mstep:
Dieses Programm steuert den Mplayer. Im Wesentlichen lässt es den Film auf Befehl (ENTER) von der jeweiligen Startposition (Position = absolute Zeit in Sekunden ) bis zur Stopposition laufen und pausiert dan wieder. Ausserdem kann man zu einer bestimmte Stelle im Film springen. Die Start- bzw. Stoppositionen entnimt das Programm aus einem Datenfile (pro Zeit (ganzzahlig, Sek.) eine neue Zeile). Diese Zeiten lassen sich gut mit der -edlout Option von Mplayer bestimmen oder einfach durch ein kurzes Pausieren des Film an der entsprechenden Stelle (Mplayer schreibt die Zeit aller Pausierungen auf die Konsole). Nachher muss nur noch auf eine ganze Zahl gerundet und das ganze ins Datenfile übernommen werden.

Ablauf der Präsentation:

Erstellen des first-in-first-out-Puffers um dem Mplayer Befehle zu übergeben
#mkfifo input1

Starten des Mplayers im slave-Modus (sollte damit die Tastatureingaben nicht abfangen); "-osdlevel 0" unterdrückt den Fortschrittsbalken bein Spulen.
#mplayer show.avi -slave -vo dga -osdlevel 0 < input1

Starten von mstep:
./mstep

Problem: Sobald mstep startet wird der Mplayer aktiviert und mstep verliert den Fokus. Mplayer füllt im dga-modus den Bildschirm voll aus und ich gelange nicht mehr an mein mstep ran. Für die Präsentation logge ich mich also remote per ssh ein und führe so mstemp von einem zweiten Computer aus. Laptop1 präsentiert (hinten im Saal), Laptop2 (vorne beim präsentierenden) führt übers Wlan-Netzwerk mstep aus und kontrolliert so Laptop1.
Geht sicher auch irgendwie weniger umständlich, wie?


Es ist mir nicht so wichtig ob mit X oder ohne (da ja auch remote möglich). Ich suche nach einer einfachen Möglickeit Mausklicks in Komandozeilen basierte Programme einzubinden ohne mit Fensterchen etc. umgehen zu müssen.

cucu

peschmae
11-12-2003, 08:28
für mit X schau dir doch mal den Thread da an: http://www.mail-archive.com/devel@xfree86.org/msg03827.html

dort wirt u.a. auch auf dieses Programm verwiesen, das etwas in die Richtung macht. d.h. zumindest auf "globale" Mouseevents reagiert.

MfG Peschmä

curdegn
12-12-2003, 00:46
Danke für den Tip.
Ich schaue es mal bei Gekegenheit an (heute und morgen werde ich ENTER drücken, da keine Zeit zum Programmieren).

cucu

ContainerDriver
16-12-2003, 21:02
Du kannst das auch mit ncurses machen (falls du das noch baruchst):
http://www.pronix.de/index.php?site=C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel10b#10_7

MfG

Florian