Tom's Guide > Forum > Programmation > [wxWidgets-C++] texte statique cliquable

[wxWidgets-C++] texte statique cliquable

Forum Programmation : [wxWidgets-C++] texte statique cliquable

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

désolé, je ne vois pas le rapport :-?

Répondre à ritzle

En fait tu crées ton propre widget.
En le faisant hériter d'un widget existant:

Code :
  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::onPaint(...), 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.

Répondre à CRicky

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

Répondre à ritzle

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 :

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 :

Code :
  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) :

Code :
  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:

Répondre à Defaite
Tom's Guide > Forum > Programmation > [wxWidgets-C++] texte statique cliquable
Aller à :

Il y a 467 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens