Se connecter / S'enregistrer
Votre question

[wxWidgets-C++] texte statique cliquable

Tags :
  • Application web
  • Programmation
Dernière réponse : dans Programmation
13 Janvier 2006 15:34:16

Bonjour,

Dans ma fenêtre héritant de la classe wxFrame je voudrais mettre du texte sur lequel l'utilisateur pourrait cliquer, mais je ne voudrais pas que ca ressemble à un bouton. Ca peut etre un bouton, mais sans bordure alors.
Qu'y-a-t'il comme solution pour faire cela ?

Merci

Autres pages sur : wxwidgets texte statique cliquable

13 Janvier 2006 22:25:38

désolé, je ne vois pas le rapport :-?
a b L Programmation
14 Janvier 2006 13:04:50

En fait tu crées ton propre widget.
En le faisant hériter d'un widget existant:
  1. class MonSuperBouton : public wxButton
  2. {
  3. MonSuperBouton() : wxButton() {}
  4. MonSuperBouton(wxWindow* parent, wxWindowID id, const wxString& label, const wxPoint& pos, const wxSize& size = wxDefaultSize, long style = 0, const wxValidator& validator, const wxString& name = "button") : wxButton(parent, id, label, pos, size, style, validator, name) {}
  5. };


Si tu ne fais que ça, MonSuperBouton fera exactement la même chose que wxButton.
L'affichage des widgets se font par une méthode interne void OnPaint(wxPaintEvent& event);
donc si tu redéfinis cette méthode dans ta classe, ce ne sera plus l'affichage du bouton qui sera appelé mais la tienne. Du coup, tu peux dessiner ce que tu veux (et donc ne pas afficher de cadre).
Et si tu ne redéfinis pas les autres méthodes (comme par exemple tout ce qui concerne la gestion de la souris), et bien ce sera le comportement du bouton qui sera conservé.
Résultat: tu as le fonctionnement d'un bouton, mais tu affiche ce que tu veux à l'écran.

Pour savoir quoi mettre dans la méthode OnPaint, le plus simple à faire (pas forcément le plus simple pour comprendre) est de prendre les sources de wxWidgets et de regarder le code de wxButton::o nPaint(...), car je suppose qu'à l'intérieur il y a l'affichae du texte et du cadre selon les styles. Il te suffirait de tout reprendre sauf ce que tu veux enlever.
14 Janvier 2006 13:38:33

En fait j'ai fait quelque chose dans le meme style, j'ai dérivé wxStaticText en le faisant réagir à un clic de souris ( Source )
Merci pour ton aide
22 Juin 2007 14:00:18

Tu peux aussi utiliser le control wxBitmapButton qui te permet de mettre des images au survol de la souris ainsi qu'au clique. :D 

Tiens un bout de code :

  1. // Déclaration du bouton
  2. wxBitmapButton *Button1 = new wxBitmapButton(this,-1, this->GetBitmapResource(wxT("button1.bmp")),wxDefaultPosition, wxSize(26, 19), 0 );
  3. // Déclaration de l'image de survol
  4. wxBitmap Button1BitmapHover(this->GetBitmapResource(wxT("button1_survol.bmp")));
  5. // Déclaration de l'image de clique
  6. wxBitmap Button1BitmapSel(this->GetBitmapResource(wxT("img/button1_clique.bmp")));


Dans ta frame, il faut en plus ajouter cette fonction :

  1. wxBitmap Nom_De_Frame::GetBitmapResource( const wxString& name )
  2. {
  3. wxUnusedVar(name);
  4. if (name == _T("img/button1.bmp")) {
  5. wxBitmap bitmap(_T("img/button1.bmp"), wxBITMAP_TYPE_BMP);
  6. return bitmap;
  7. } else if (name == _T("img/button1_survol.bmp")) {
  8. wxBitmap bitmap(_T("img/button1_survol.bmp"), wxBITMAP_TYPE_BMP);
  9. return bitmap;
  10. } else if (name == _T("img/button1_clique.bmp")) {
  11. wxBitmap bitmap(_T("img/button1_clique.bmp"), wxBITMAP_TYPE_BMP);
  12. return bitmap;
  13. }
  14. return wxNullBitmap;
  15. }


Et ne pas oublier d'ajouter dans la déclaration public de ta frame (.h) :

  1. wxBitmap GetBitmapResource( const wxString& name );


Et voila ;) 

P.S.: Je sais que ce topic est vieux comme le monde, mais autant donner la solution pour ceux qui comme moi n'arrete pas de tomber dessus :kaola: 

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS