PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mausbewegung - gtkmm



andras98
16-11-2003, 21:08
Hi,

Ich versuch schon lange Zeit vergebens ein kleines GTK Programm zu schreiben welches nichts anderes tut, als die aktuelle Mausposition auszugeben. Hab schon herum gegoogelt (auf der gtkmm seite gibts zwar tutorials aber dort kommt die MouseMotion irgendwie zu kurz) und folgenden Block fuer interessant empfunden.


bool print2(GdkEventMotion *event)
{
int mouse_x, mouse_y;
mouse_x = event->x;
mouse_y = event->y;
std::cout <<"mouse xy: " << mouse_x << "," << mouse_y << "\n";
return true;
}

mein Problem ist aber, dass mit gcc sagt, dass event keinen Member x bzw. y hat. Hmmm event ist doch von GdkEventMotion vordefiniert. Vielleicht stammt der Code nocht von aelteren Versionen. ...

Hat jemand eine Ahnung wie ich auf die aktuelle Mausposition zugreifen kann? Hab ich etwas uebersehen?

lg,

Andreas

sagi
16-11-2003, 21:29
also ich hab noch nicht mit gtkmm gearbeitet, aber in c gibt es die Eintraege schon:

http://developer.gnome.org/doc/API/2.0/gdk/gdk-Event-Structures.html#GdkEventMotion


struct GdkEventMotion {

GdkEventType type;
GdkWindow *window;
gint8 send_event;
guint32 time;
gdouble x;
gdouble y;
gdouble *axes;
guint state;
gint16 is_hint;
GdkDevice *device;
gdouble x_root, y_root;
};

allerdings sind das keine int sonder double. vielleicht hilft das weiter.

mfg

c.

andras98
16-11-2003, 21:54
Auch mit double findet er x,y nicht ...

Danke trotzdem,

Andreas

andras98
18-11-2003, 12:29
Hi,

da ich mit gtkmm nichts erreicht habe - habe ich es mal in c versucht ...
irgendwie ruehrt sich aber nichts. nicht mal eine Fehlermeldung. Das Programm soll nichts weiter machen als die Koordinaten der Maus ausgeben ...

lg,
Andreas



#include <gtk/gtk.h>
#include <stdio.h>


int print2(GdkEventMotion *event)
{
gdouble mouse_x, mouse_y;
mouse_x = event->x;
mouse_y = event->y;
g_print(stdout,"mouse_y: %d, mouse_x %d\n",mouse_x,mouse_y);
return 0;
}


int main( int argc,char *argv[] )
{
GtkWidget *window;
GtkWidget *button;
int x,y;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);


g_signal_connect (G_OBJECT (window),"motion_notify_event",
G_CALLBACK (print2), NULL);

g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (gtk_main_quit), NULL);

gtk_widget_show(window);

gtk_main ();


return(0);
}


Edited by moderator: Codetags!

sagi
18-11-2003, 12:49
Ich glaube print2() sollte anders aufgebaut sein:

http://developer.gnome.org/doc/API/2.0/gtk/GtkWidget.html#GtkWidget-motion-notify-event