Membres inscrits :2359
Membres en ligne : 0
Invités en ligne : 5


|
Menu Snippets (navigation): |
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. 
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. }
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.
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): |
|