bonjour,
je travaille sur un projet qui fait partie de mon parcour scolaire .
en effet il faut creer une fenetre où il y a des pions à deplacer , j'ai aussi besoin de recuperer les coordonnées d'un clic de la souris sur cette fenetre .
j'ai commencer à coder et c'est mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <stdlib.h>
#include <gtk/gtk.h>
void deplacement(double *xc,double *yc){
  *xc=20;
  *yc=150;
}
gboolean on_button_press_event(GtkWidget *widget,GdkEventButton *event,gpointer user_data)
{
	if(event->type == GDK_BUTTON_PRESS)
	{
		g_print("x:%d y:%d\n",(int)event->x,(int)event->y);
		return TRUE;
	}
	else
	{
		g_print("what else ?");
		return FALSE;
	}
}
 
gboolean circle_expose_cb(GtkWidget *wi, GdkEventExpose *ev, gpointer user_data)
{
   cairo_t *cr;
   double xc;
   double yc;
   /* Create a cairo context */
   cr = gdk_cairo_create(wi->window);
   deplacement(&xc,&yc);
   /* Set it to a medium green */
   cairo_set_source_rgb(cr, 0, 0.7, 0);
   /* Draw a circle in the center */
   cairo_arc(cr,xc ,yc ,10, 0, 2*G_PI);
   /* Fill the circle */
   cairo_fill(cr);
 
   /* Free the context */
   cairo_destroy(cr);
 
   return FALSE;
}
int main(int argc,char **argv){
  GtkWidget *pWindow;
  GtkWidget *pImage;
  GtkWidget *pVBox;
  GtkWidget *window;
GtkWidget *event_box;
/*creation de la fenetre principale*/  
	gtk_init(&argc,&argv);
 	pWindow=gtk_window_new(GTK_WINDOW_TOPLEVEL);
  	gtk_widget_set_size_request(GTK_WIDGET(pWindow),320,400);
  	gtk_window_set_position(GTK_WINDOW(pWindow),GTK_WIN_POS_CENTER);
  	gtk_window_set_title(GTK_WINDOW(pWindow),"JIPTO");
  	g_signal_connect(G_OBJECT(pWindow),"destroy",G_CALLBACK(gtk_main_quit),NULL);
 
 	pVBox = gtk_vbox_new(FALSE,0);
  	gtk_container_add(GTK_CONTAINER(pWindow),pVBox);
  	pImage = gtk_image_new_from_file("./plateau.png");
 
  	gtk_box_pack_start(GTK_BOX(pVBox), pImage, FALSE, FALSE, 5);
 
  	g_signal_connect_after(pWindow, "expose-event", G_CALLBACK(circle_expose_cb), NULL);
  	window=GTK_WIDGET(pWindow);
 
 
 	/*g_object_ref(pImage);
    	gtk_container_remove(GTK_CONTAINER(pWindow), pImage);
     	gtk_container_add(GTK_CONTAINER(pVBox), pImage);
     	g_object_unref(pImage);*/
 
	event_box=gtk_event_box_new();
	gtk_container_add(GTK_CONTAINER(pVBox), event_box);
   	gtk_container_add(GTK_CONTAINER(event_box), pImage);
	gtk_widget_add_events(event_box,GDK_BUTTON_PRESS_MASK);
  	g_signal_connect(G_OBJECT(event_box), "button_press_event", G_CALLBACK(on_button_press_event),  NULL);
	/*affichage de tout*/
	gtk_widget_show_all(pWindow);
 
 	/*fermeture de gtk*/
    	gtk_main();
 
    	return EXIT_SUCCESS;
}
en executant , je trouve le cercle que j'ai dessiné (avec cairo) mais j'arrive pas à recuperer les coordonnées du clic de la souris
le shell m'affiche ce message :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Attempting to add a widget with type GtkImage to a container of type GtkEventBox, but the widget is already inside a container of type GtkVBox, the GTK+ FAQ at http://library.gnome.org/devel/gtk-faq/stable/ explains how to reparent a widget.
serait il possible de m'aider ?
merci d'avance .