wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 1
Pub hébergeur
Pourquoi cette pub ?

Valid XHTML 1.0 Transitional

Valid CSS2

Menu Snippets (navigation):
Pages: 1    Accueil » Snippets » Contrôles
» Les "choix", Bouton radio, Case à cocher etc...
Détails du snippet : Les "choix", Bouton radio, Case à cocher etc...
Informations sur l'auteur de ce snippet :


Hors ligne
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Introduction / Description :
Bonjour,
Je vais vous montrez ici quelle classe utiliser pour afficher des bouton radio des case à cocher et autres.

http://i209.photobucket.com/albums/bb283/warzer/wxRadioBox.png
http://i209.photobucket.com/albums/bb283/warzer/CaseACocher.png
Contenu du snippet :
Les bouton radio :

Le fichier .h

Code wxWidgets:

 
/*wxControlMain.h*/
#include <wx/wx.h>
#include <wx/radiobox.h>
 
class wxControlFrame: public wxFrame
{
    public:
        wxControlFrame(wxFrame *frame, const wxString& title);
        ~wxControlFrame(){};
    private:
        void OnClose(wxCloseEvent& event);
        void OnBouton1(wxCommandEvent& event);
        void OnToggleBouton(wxCommandEvent& event);
        void OnValiderChoixRad(wxCommandEvent& event);
        void OnActiverRadio(wxCommandEvent& event);
 
        static const int m_bouton1ID,m_toggleBoutonID,m_wxRadioBoxID;
 
        wxButton *m_bouton1;
        wxToggleButton *m_toggleBouton;
        wxRadioBox *m_wxRadioBox;
 
        DECLARE_EVENT_TABLE()
};
 


Le fichier .cpp

Code wxWidgets:

 
/*wxControlMain.cpp*/
#include "wxControlMain.h"
 
const int wxControlFrame::m_bouton1ID = wxNewId();
const int wxControlFrame::m_toggleBoutonID = wxNewId();
const int wxControlFrame::m_wxRadioBoxID = wxNewId();
 
BEGIN_EVENT_TABLE(wxControlFrame, wxFrame)
    EVT_CLOSE(wxControlFrame::OnClose)
 
    EVT_BUTTON(m_bouton1ID, wxControlFrame::OnValiderChoixRad)
    EVT_TOGGLEBUTTON(m_toggleBoutonID, wxControlFrame::OnActiverRadio)
END_EVENT_TABLE()
 
wxControlFrame::wxControlFrame(wxFrame *frame, const wxString& title)
    : wxFrame(frame, -1, title)
{
    wxArrayString tabChoix;
    tabChoix.Add(_T("Choix 1"));
    tabChoix.Add(_T("Choix 2"));
    tabChoix.Add(_T("Choix 3"));
    tabChoix.Add(_T("Choix 4"));
 
    m_bouton1 = new wxButton(this, m_bouton1ID, _T("Valider"),wxPoint(125,10));
    m_toggleBouton = new wxToggleButton(this, m_toggleBoutonID, _T("Activer"),wxPoint(125,40));
    /*Créer la liste de bouton radio.*/
    m_wxRadioBox = new wxRadioBox(this,m_wxRadioBoxID,_T("Faites votre choix"),wxPoint(0,0),wxSize(100,100),tabChoix,1);
    m_wxRadioBox->Enable(false);
}
 
void wxControlFrame::OnClose(wxCloseEvent &event)
{
    Destroy();
}
 
void wxControlFrame::OnValiderChoixRad(wxCommandEvent& event)
{
    if(m_toggleBouton->GetValue())
    {
        wxString msg;
        msg << _T("Vous avez fait le ") << m_wxRadioBox->GetStringSelection();    /*Récupère le texte de la case que vous avez coché*/
        wxMessageBox(msg);
    }
    else
    {
        wxMessageBox(_T("Activer les RadioBox"));
    }
}
void wxControlFrame::OnActiverRadio(wxCommandEvent& event)
{
    if(m_toggleBouton->GetValue())
    {
        m_wxRadioBox->Enable(true);     /*Active les RadioBox*/
        m_toggleBouton->SetLabel(_T("D\351sactiver"));    /*Change le nom du bouton*/
    }
    else
    {
        m_wxRadioBox->Enable(false);    /*Désactive les RadioBox*/
        m_toggleBouton->SetLabel(_T("Activer"));
    }
}
 


Les cases à cocher :

Le fichier .h

Code wxWidgets:

 
#include <wx/wx.h>
#include <wx/checklst.h>
 
class wxControlFrame: public wxFrame
{
    public:
        wxControlFrame(wxFrame *frame, const wxString& title);
        ~wxControlFrame(){};
    private:
        void OnClose(wxCloseEvent& event);
        void OnValiderChoixCase(wxCommandEvent& event);
 
        static const int m_wxCheckListBoxID,,m_buttonCaseID;
 
        wxButton *m_buttonCase;
        wxCheckListBox *m_wxCheckListBox;
 
        DECLARE_EVENT_TABLE()
};
 


Le fichier .cpp

Code wxWidgets:

 
#include "wxControlMain.h"
 
const int wxControlFrame::m_wxCheckListBoxID = wxNewId();
const int wxControlFrame::m_buttonCaseID = wxNewId();
 
BEGIN_EVENT_TABLE(wxControlFrame, wxFrame)
    EVT_CLOSE(wxControlFrame::OnClose)
    EVT_BUTTON(m_buttonCaseID , wxControlFrame::OnValiderChoixCase)
END_EVENT_TABLE()
 
wxControlFrame::wxControlFrame(wxFrame *frame, const wxString& title)
    : wxFrame(frame, -1, title)
{
    wxInitAllImageHandlers();
    SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
    wxArrayString tabChoix;
    tabChoix.Add(_T("Sandwich"));
    tabChoix.Add(_T("Frites"));
    tabChoix.Add(_T("Boisson"));
    tabChoix.Add(_T("Donuts"));
    m_wxCheckListBox = new wxCheckListBox(this,m_wxCheckListBoxID,wxPoint(0,0),wxSize(100,100),tabChoix);
    m_buttonCase = new wxButton(this,m_buttonCaseID,_T("Valider"), wxPoint(110,10));
    m_wxCheckListBox->Check(0,true);    //On peut cocher par défaut une case, ici pour l'example je le fait pour le premier item (à l'indice zero, ça marche comme les tableaux).
}
 
void wxControlFrame::OnClose(wxCloseEvent &event)
{
    Destroy();
}
 
void wxControlFrame::OnValiderChoixCase(wxCommandEvent& event)
{
    wxString msg = _T("Votre Menu :\n");
    //On parcour la liste de choix.
    for(int i = 0; i < 4; i++)
    {
        if(m_wxCheckListBox->IsChecked(i))        //On vérifie si l'item en cour et cocher ou non.
            msg << _T("- ") << m_wxCheckListBox->GetString(i) << _T(" \n");        //S'il l'est on récupère son label et on l'ajoute au message final
    }
 
    if(msg == _T("Votre Menu :\n"))
        msg = _T("Vous n'avez rien choisi.");
 
    wxMessageBox(msg);        //On affiche le choix final.
}
 
Explications finales :
Bouton radio :
J'ai rajouté ici 2 boutons si vous comprenez pas comment il marche allez faire un tour ici : Snippet sur les boutons.

Sinon pour parler du constructeur, il requière un pointeur sur la fenêtre, une ID, un nom pour l'ensemble (voir image) une position, une taille et enfin la liste de choix que j'ai ici stocké dans un wxArrayString ou je les insère grâce à la fonction Add.

Dans l'exemple pour utiliser quelque fonction de cette classe j'ai mit 2 bouton un qui sert à activer ou non la liste de choix (fonction : Enable(bool) et l'autre qui me permet de savoir quel est le label du bouton cocher (fonction : GetStringSelection() qui retourne un wxString)

Case à cocher :

Tout est commenté et pour le constructeur c'est la même chose que pour les boutons radios.

Voilà j'espère avoir été claire et pour plus d'informations  n'hésitez pas à poste sur le forum à faire vos commentaire à propos du snippet et aussi d'aller voir la doc : wxRadioBox ou wxRadioButton     qui vous permet de ne mettre qu'un seul bouton radio et donc c'est le même constructeur sauf que vous ne mettez pas le wxArrayString.
Et pour les case à cocher : wxcheckListBox ou wxCheckBox qui vous permet de ne mettre qu'une seul case à cocher.

Merci de m'avoir lu et à bientôt.
Commentaires
Zoloom (Membre)
Inscrit le : 31-12-2007
Messages: 97
Snippets: 0
Tutoriels: 0
Hors ligne
Merci pour ces snippets Warzer je suis sur que les débutants vont apprécier ;)

Je te conseil d'ajouter :

SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));

Dans la classe wxControlFrame afin d'éviter le vieux fond gris qui fait peur :)
Warzer (Membre)
Inscrit le : 05-10-2007
Messages: 284
Snippets: 4
Tutoriels: 0
Hors ligne
Merci j'apprécie.

Et je suivrait ton conseil c'est vrai que j'y avait pas fait attention au fond mais quand on y repense ^^
Menu Snippets (navigation):
Pages: 1    Accueil » Snippets » Contrôles
» Les "choix", Bouton radio, Case à cocher etc...