Ceci est le constructeur de ma case pour un jeu de plateau
j'aurais aimé pouvoir appeler une fonction qui change l'image (gui_case::set(int i))
[cpp]
gui_case::gui_case(GtkWidget *table, int *x, int *y)
{
my_table = table;
myx = *x;
myy = *y;
my_case = gtk_image_new_from_file("empty.bmp");
gtk_widget_show (my_case);
gtk_table_attach_defaults (GTK_TABLE(my_table), my_case, myx, myx + 1, myy, myy + 1);
g_signal_connect ((gpointer) my_case, "button_press_event",
G_CALLBACK(callback_case),
(void*)this
);
}
[/cpp]
j'utilise une fonction statique, callback_case pour appeler this->set(1);
[cpp]
static void callback_case(GtkMenuItem *menuitem,
gpointer data)
{
gui_case *toto;
toto = (gui_case*)data;
toto->set(1);
}
[/cpp]
Seulement ca ne fonctionne pas, noté que j'ai du mal avec les pointeur et que je fait tout un trafique pour passé le pointeur this dans g_signal_connect et dans callback_base pour que ca compil :p
Ici le header gui_case.h
[cpp]
#ifndef GUI_CASE_H
#define GUI_CASE_H
#include <gtk/gtk.h>
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
class gui_case
{
private:
GtkWidget *my_case;
GtkWidget *my_table;
int myx;
int myy;
//static void callback_case(GtkMenuItem *menuitem,
// gpointer data);
public:
gui_case(GtkWidget *table, int *x, int *y);
void set(int i);
};
static void callback_case(GtkMenuItem *menuitem,
gpointer data);
#endif
[/cpp]
Evidemment kan je click sur la case rien ne se passe =( (la fonction gui_case::set(1) marche pourtant)
merci de votre aide ;)