IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxWidgets Discussion :

Ajouter un wxControl à une wxToolBar


Sujet :

wxWidgets

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 268
    Points : 393
    Points
    393
    Par défaut Ajouter un wxControl à une wxToolBar
    Bonjour,

    J'essaye d'ajouter un contrôle personnalisé dans la toolbar de mon appli.
    Ce contrôle contient un texte statique, 3 boutons et un slider. Il est bien entendu horizontal.

    Voici mon cheminement :
    1) Dériver une classe de wxControl (myControl) avec comme parent la toolbar en question.
    2) Créer mes petits contrôles (texte, boutons, slider) dans cette classe avec comme parent myControl.
    3) Les mettre ensemble à l'aide d'un wxBoxSizer(wxHORIZONTAL).

    Dans ma Frame principale, j'ajoute le contrôle à ma toolbar avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    _toolBar->InsertControl(position, _myControl);
    _toolBar->Realize();
    La position est vérifiée et correcte. Seulement le contrôle est mal foutu avec les boutons qui se chevauchent, le texte non visible et le slider qui n'est pas au bon endroit...
    Une idée?

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    En gérant DoGetBestSize et OnSize :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    wxSize MyCtrl::DoGetBestSize()const
    {
       return GetSizer()?GetSizer()->CalcMin():wxControl::DoGetBestSize();
    }
     
    void MyCtrl::OnSize(wxSizeEvent&)
    {
       Layout();
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 268
    Points : 393
    Points
    393
    Par défaut
    Quand doit-je appeler DoGetBestSize() ? Après l'appel à SetSizer(..) ?

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par atm0sfe4r Voir le message
    Quand doit-je appeler DoGetBestSize() ? Après l'appel à SetSizer(..) ?
    Nan. L'appel est automatique par wxWidgets quand il en a besoin. Il faut juste les définir dans ton contrôle.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 268
    Points : 393
    Points
    393
    Par défaut
    Bon, toujours pareil; je vais montrer du code, peut être y a-t-il une étourderie...


    Mon code dans la Frame principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    // creation toolbar
            _toolBar = CreateToolBar(wxTB_FLAT | wxTB_HORIZONTAL);
    	_toolBar->SetToolBitmapSize(wxSize(25, 25));	
    	_toolBar->SetMargins(10, 10);
     
    // ajout de 7 tools
    	_toolBar->AddTool(......);
    	_toolBar->AddTool(......);
    	_toolBar->AddTool(......);
    	_toolBar->AddTool(......);
    	_toolBar->AddSeparator();
    	_toolBar->AddTool(......);
    	_toolBar->AddSeparator();
     
    // creation du contrôle
    	_myControl = new MyControl(_toolBar, wxSize(500, _toolBar->GetSize().GetHeight()));
     
    // insertion du contrôle (position à l'indice 7)
    	_toolBar->InsertControl(7, _myControl);
    	_toolBar->Realize();
     
    // association Frame/toolbar
    	SetToolBar(_toolBar);


    Mon constructeur de contrôle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    MyControl::MyControl(wxWindow* parent, const wxSize& size) : 
    wxControl(parent, -1, wxDefaultPosition, size)
     
     
    {
    	// creation de bitmaps ...... pas important
     
    wxStaticText* text = new wxStaticText(this, -1, wxString("A control : "));
    wxBitmapButton* button1 = new wxBitmapButton(this, ...);
    wxBitmapButton* button2 = new wxBitmapButton(this, ...);
    wxBitmapButton* button3 = new wxBitmapButton(this, ...);
    wxSlider* slider = new wxSlider(this, ID_SLIDER, 0, 0, 0);
     
    // layout
    wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
    sizer->Add(text, 0);
    sizer->Add(buttonPlay, 0);
    sizer->Add(buttonPause, 0);
    sizer->Add(buttonStop, 0);
    sizer->Add(slider, 0);
    SetSizer(sizer);
    }

    Quelquechose qui cloche doc' ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 268
    Points : 393
    Points
    393
    Par défaut
    Après avoir bien cherché, un simple appel à Layout() ordonne les controles correctement dans le wxControl personnalisé.

    Résolu!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ajouter 1 mois à une date dans une requete
    Par alain.lc dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 04/04/2005, 12h05
  2. Ajout d'élément à une page
    Par Ditch dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/03/2005, 12h45
  3. [class] Ajouter class devant une fonction
    Par Pedro dans le forum Langage
    Réponses: 12
    Dernier message: 07/03/2005, 13h11
  4. [débutant] Ajout bizarre d'une chaîne xmlns=""
    Par minnieBis dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 17/05/2004, 10h37
  5. [Débutant][JSP] Ajout des caractères à une String...
    Par Henkyl dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 04/03/2004, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo