Bonjour!
Voici le patron le .cc de la classe en question:
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
#ifndef CCASENOIRE_H
#define CCASENOIRE_H
 
#include <gtkmm.h>
#include <iostream>
 
 
class CCasenoire : public Gtk::EventBox
{
    public:
    //constructeurs et destructeur
    CCasenoire(int,int,std::string);
    CCasenoire(int,int);
    virtual ~CCasenoire();
    //fonction d'acces
    int col() const;
    int rang() const;
    bool est_occupe() const;
    protected:
    int m_col;//coordonnée
    int m_rang;//coordonnée
    bool m_etat;//marqueur case vide:false ou pleine:true
    std::string m_case;//le nom de la case vide
    static std::string m_icone;//image piece à charger lors d'un déplacement
    //membres
    Gtk::Image m_image;
    Glib::RefPtr<Gdk::Pixbuf> m_ppixbuf,m_ppixbuftemp;
    //Fonctions évenement souris
    bool _appui(GdkEventButton*);
    bool _relache(GdkEventButton*);
    bool _redim(GdkEventExpose*);
};
 
#endif //CCASENOIRE_H
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
#include "CCasenoire.h"
#include "CEchiquier.h"
 
//Constructeurs et destructeur
 
CCasenoire::CCasenoire(int col,int rang):m_col(col),m_rang(rang),m_etat(false),m_case("cn")
{
    m_ppixbuf=Gdk::Pixbuf::create_from_file(m_case+".jpg");
    m_image.set(m_ppixbuf);
    add(m_image);
    signal_button_press_event().connect(sigc::mem_fun(*this,&CCasenoire::_appui));
    signal_button_release_event().connect(sigc::mem_fun(*this,&CCasenoire::_relache));
}
CCasenoire::CCasenoire(int col,int rang,std::string s):m_col(col),m_rang(rang),m_etat(true),m_case("cn")
{
    m_ppixbuf=Gdk::Pixbuf::create_from_file(m_case+s+".jpg");
    m_ppixbuftemp=m_ppixbuf->scale_simple(60,60,Gdk::INTERP_BILINEAR);
    m_image.set(m_ppixbuftemp);
    add(m_image);
    signal_button_press_event().connect(sigc::mem_fun(*this,&CCasenoire::_appui));
    signal_button_release_event().connect(sigc::mem_fun(*this,&CCasenoire::_relache));
    signal_expose_event().connect(sigc::mem_fun(*this,&CCasenoire::_redim));//signal de re-dimension
}
CCasenoire::~CCasenoire(){}
 
//fonction d'acces
int CCasenoire::col() const{return m_col;}
int CCasenoire::rang()const{return m_rang;}
bool CCasenoire::est_occupe()const{return m_etat;}
 
//fonctions signal
bool CCasenoire::_appui(GdkEventButton* event)
{
    //TODO
    std::cout<<col()<<rang()<<std::endl;
    return true;
}
bool CCasenoire::_relache(GdkEventButton* event)
{
    //TODO
    std::cout<<col()<<rang()<<std::endl;
    return true;
}
bool CCasenoire::_redim(GdkEventExpose* event)
{
    if(!m_etat){return false;}
    int l,h;
    l=get_width();h=get_height();
    m_ppixbuftemp=m_ppixbuf->scale_simple(l,h,Gdk::INTERP_BILINEAR);
    m_image.set(m_ppixbuftemp);
    return true;
}
Il y a 32 "instanciations" (comment ça s'écrit instenciations?) de cette classe(et 32 de CCaseblanche quasi identique)
Lorsque je clique sur une case les coordonnées de celle-ci s'affichent mais lorsque je relache le bouton de la souris sur une autre case, c'est toujours les coordonnées de la case précédente qui s'affichent contre toute attente.