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


|
Conversation : Problème avec les wxGridBagSizer |
littlefish (Membre)
Inscrit le : 04-02-2009
Messages: 13
Snippets: 0
Tutoriels: 0
Hors ligne |
Bonsoir tout le monde, je suis actuellement en train de développer une petite application. Et là je bute sur la gestion des Sizers, j'ai testé différentes méthodes (avec les wxBoxSizer et les wxGridSizer) mais le résultat obtenus avec ne me satisfaisais pas. Je me suis donc lancer sur les wxGridBagSizer qui permette de créer l'équivalent des wxGridSizer mais avec la possibilité de fusionner des lignes et des colonnes. Grâce à cette nouvelle méthode je parviens facilement à disposer mes objet comme je le désire. Mais les différents objet que j'insère dans mon wxGridBagSizer ne se redimensionne pas quand j'agrandis ou que je diminue la taille de ma fenêtre.
Je vous met un bout de code, pour voir si il y à quelque chose que je fait mal.
Code Cpp:void listeArticle::CreateGUIControls() { m_oLayoutPrincipal = new wxGridBagSizer(2,2); this->SetSizer(m_oLayoutPrincipal); this->SetAutoLayout(true); m_olisteArticle=new wxListCtrl(this, ID_LISTE_ARTICLE, wxDefaultPosition, wxDefaultSize, wxLC_REPORT); m_olisteArticle->InsertColumn(0,wxT("Types"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("Section"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("Catégories"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("TVA"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("Prix à l'achat"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("Prix de vente"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("Désignation"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("Code article"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("ID"),wxLIST_FORMAT_LEFT,60 ); m_oLayoutPrincipal->Add(m_olisteArticle, wxGBPosition(0,0), wxGBSpan(8,10),wxALIGN_CENTER | wxALL | wxEXPAND,5); m_oBouttonAjoutArticle = new wxButton(this, ID_BOUTTON_AJOUTER_ARTICLE, wxT("Ajouter"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("m_oBouttonAjoutArticle")); m_oBouttonModifierArticle = new wxButton(this, ID_BOUTTON_MODIFIER_ARTICLE, wxT("Modifier"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("m_oBouttonModifierArticle")); m_oBouttonSupprimerArticle = new wxButton(this, ID_BOUTTON_SUPPRIMER_ARTICLE, wxT("Supprimer"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("m_oBouttonSupprimerArticle")); m_oLayoutPrincipal->Add(m_oBouttonAjoutArticle, wxGBPosition(8,2), wxGBSpan(2,2),wxALIGN_CENTER | wxALL ,5); m_oLayoutPrincipal->Add(m_oBouttonModifierArticle, wxGBPosition(8,4), wxGBSpan(2,2),wxALIGN_CENTER | wxALL ,5); m_oLayoutPrincipal->Add(m_oBouttonSupprimerArticle, wxGBPosition(8,6), wxGBSpan(2,2),wxALIGN_CENTER | wxALL ,5); GetSizer()->Layout(); GetSizer()->Fit(this); GetSizer()->SetSizeHints(this); Center(); }
En vous remerciant par avance.
Dernière modification par littlefish (25-02-2009 23:31:58)
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Salut.
Ton interface ne me parait pas tellement compliquée : l'utilisation des sizers normaux devrait largement suffire.
Par contre, si je peux me permettre de te donner un petit conseil : tu devrais essayer de séparer le code de création des contrôles de celui avec lequel tu les remplis (je parle du wxListCtrl. De plus, tu devrais placer le code de création des contrôle dans l'ordre dans lequel ils apparaissent, en indentant chaque fois que tu ajoutes un niveau de sizer: ça sera plus lisible pour toi.
Si je comprends bien ce que tu veux faire, ça devrait ressembler à quelque chose comme ça (le premier qui se moque de mes talents de dessinnateur est banni du site )
Code: -------------- | | [Bouton] | | | wxListCtrl | [Bouton] | | | | [Bouton] --------------
En regardant bien, tu t'apercevras que tu as en fait deux colonnes. Il faudra donc créer un premier wxBoxSizer horizontal Tu lui ajoutes le wxListCtrl, avec une proportion de 1 car (je pense) il sera redimensionné avec la fenêtre. Ensuites, tu crées un wxBoxSizer vertical pour la colonne de boutons. Tu ajoutes les 3 boutons à ce sizer avec une proportion de 0 (les boutons ne sont généralement pas redimensionnables) Enfin, tu ajoutes le sizer des boutons au sizer principal, et le tour est joué.
Ce qui donne comme code :
Code wxWidgets:// Création du sizer principal wxBoxSizer *mainsizer=new wxBoxSizer(wxHORIZONTAL); // Création du wxListCtrl m_olisteArticle=new wxListCtrl(this, ID_LISTE_ARTICLE, wxDefaultPosition, wxDefaultSize, wxLC_REPORT); // Ajout du wxListCtrl au sizer principal avec une proportion de 1 // et une bordure de 5 pixels tout autour mainsizer->Add(m_olisteArticle, 1, wxALL|wxEXPAND, 5); // Création du sizer pour la colonne de boutons wxBoxSizer btnsizer=new wxBoxsizer(wxVERTICAL); // Création du bouton numéro 1 et ajout au sizer vertical m_oBouttonAjoutArticle = new wxButton(this, ID_BOUTTON_AJOUTER_ARTICLE, wxT("Ajouter")); btnsizer->Add(m_oBouttonAjoutArticle, 0, wxALL, 0); // Idem pour le deuxième bouton m_oBouttonModifierArticle = new wxButton(this, ID_BOUTTON_MODIFIER_ARTICLE, wxT("Modifier")); btnsizer->Add(m_oBouttonModifierArticle, 0, wxTOP|wxBOTTOM, 10); // Idem pour le troisième bouton m_oBouttonSupprimerArticle = new wxButton(this, ID_BOUTTON_SUPPRIMER_ARTICLE, wxT("Supprimer")); btnsizer->Add(m_oBouttonSupprimerArticle, 0, wxALL, 0); // Ajout du sizer des boutons au sizer principal mainsizer->Add(btnSizer, 0, wxALL, 5); // Affectation du sizer à la frame SetSizer(mainsizer); // Maintenant que les contrôles sont créés, on peut les remplir m_olisteArticle->InsertColumn(0,wxT("Types"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("Section"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("Catégories"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("TVA"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("Prix à l'achat"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("Prix de vente"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("Désignation"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("Code article"),wxLIST_FORMAT_LEFT,60 ); m_olisteArticle->InsertColumn(0,wxT("ID"),wxLIST_FORMAT_LEFT,60 ); // Mise à jour du sizer et de la taille de la frame en fonction de son contenu mainsizer->SetSizeHints(this);
Après, si je n'ai pas bien compris ce que tu cherchais à faire, n'hésites pas à me le dire.
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà...
|
littlefish (Membre)
Inscrit le : 04-02-2009
Messages: 13
Snippets: 0
Tutoriels: 0
Hors ligne |
Génial je viens juste de tester et ça marche nickel, c'est tout à fait ce que je voulais. Merci Xaviou pour ton aide, et désolé pour la lenteur de ma réponse, mais je n'ai pas eu accès au net avant aujourd'hui.
P.S : Félicitations pour ton magnifique dessin
|
|
cfdev (Membre)
Lieu: Alpes de Haut Provence
Inscrit le : 08-11-2007
Messages: 127
Snippets: 4
Tutoriels: 0
Site web
Hors ligne |
xav:Si je comprends bien ce que tu veux faire, ça devrait ressembler à quelque chose comme ça (le premier qui se moque de mes talents de dessinnateur est banni du site mad ) heu.....
|
GNU Linux Power ! Slacker
|
|