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

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Problème avec les wxGridBagSizer
Conversation : Problème avec les wxGridBagSizer
25-02-2009 23:31:19  Problème avec les wxGridBagSizer #1
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)

26-02-2009 21:20:38  Re: Problème avec les wxGridBagSizer #2
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 :mad: )

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à...
02-03-2009 09:49:08  Re: Problème avec les wxGridBagSizer #3
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 ;)
02-03-2009 10:04:07  Re: Problème avec les wxGridBagSizer #4
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 )
:P heu.....

GNU Linux Power !
Slacker
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Problème avec les wxGridBagSizer