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 :

2d paramètre du constructeur de wxFrame


Sujet :

wxWidgets

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut 2d paramètre du constructeur de wxFrame
    Bonsoir.

    La documentation en ligne de wxWidgets décrit comme suit le constructeur de la classe wxFrame :

    wxFrame(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE, const wxString& name = "frame")

    Constructor, creating the window.
    Parameters
    parent : The window parent. This may be NULL. If it is non-NULL, the frame will always be displayed on top of the parent window on Windows.

    id : The window identifier. It may take a value of -1 to indicate a default value.

    (etc.)

    C'est tout ce qu'on dit sur ce second paramètre.

    Je vois dans plusieurs exemples qu'on donne à ce paramètre la valeur -1, qui, d'après ce qui précède, "indique une valeur par défaut".
    Quelle est cette valeur ? Le premier nombre non utilisé que le système trouve ? Et y a-t-il des cas où il vaut mieux ne pas utiliser -1 ?

    Je note aussi que d'après le prototype du constructeur, le second paramètre est du type wxWindowID, mais ce type ne figure pas dans la liste alphabétique des classes dans la documentation de wxWidgets.

    Si quelqu'un peut éclairer ma lanterne, merci d'avance.

    M.

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut
    Hello !

    Je ne connais pas très bien wxWidgets mais je vais essayer de t'aider d'après ce que j'ai compris!

    En fait le principe des wxWidgets est d'attribuer un identifiant pour tous les objets graphiques créés, peut importe ce type d'objet (windows, controles, etc...). Le second argument d'un objet est toujours un wxWindowID, c'est a dire l'identifiant que tu veux assigner à ton objet. Ce principe existait deja dans les MFC de microsoft. Donc, en gros, lorsque tu crées un objet, tu as le choix de lui assigner un ID ou non. Fais le uniquement si c'est nécessaire. Dans les autres cas, alors mets toujours wxID_ANY, qui est une constante definie dans wxWidgets égale à -1.
    Je vois dans plusieurs exemples qu'on donne à ce paramètre la valeur -1, qui, d'après ce qui précède, "indique une valeur par défaut".
    Quelle est cette valeur ?
    C'est donc -1 ou wxID_ANY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define wxID_ANY -1
    Et y a-t-il des cas où il vaut mieux ne pas utiliser -1 ?
    Oui tout a fait, les cas ou c'est strictement nécessaire ! Je te donne un exemple. Tu crées un bouton, et tu veux lui affecter un comportement. Alors il faudra un identifiant au bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	m_po_play_button = new wxBitmapButton(		this, 
    												wxID_PLAY, 
    												wxBitmap( *loc_po_image_play ),
    												wxPoint( 500, 200 ), 
    												wxSize( 150, 150 ) );
    Ici, l'identifiant est wxID_PLAY. C'est un enum. J'aurais pu mettre n'importe quoi d'autre.

    Ainsi, à l'aide de cet identifiant, le bouton pourra etre associé a un comportement dans la table correspondante des evenements de la Frame :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BEGIN_EVENT_TABLE(CMainFrame, wxMDIParentFrame)
    	EVT_BUTTON	(wxID_PLAY, 	CMainFrame::MaFonction)
    END_EVENT_TABLE()
    Le CMainFrame, c'est la fenetre qui contient le bouton.

    Donc en gros, pour créer ta fenêtre, sauf cas rare, mets wxID_ANY.
    Voila j'espère avoir répondu a tes questions.

    Alex

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Muetdhiver
    Hello !

    Voila j'espère avoir répondu à tes questions.

    Alex
    OK. Donc je ne me tracasse pas trop, je mets - 1 si je n'ai pas l'intention de définir un "handler" d'évènement pour la fenêtre.
    Au fond, ça me semble logique.
    Merci.

    M.

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    On peut mettre -1 comme identifiant , même pour gérer des évenements.

    Il faut alors faire :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    void Interface::CreateWidgets(void)
    {		
    //...
        m_bouttonadddirectoy=new wxButton(this,-1,_("Boutton 0"));
        m_bouttonstop=new wxButton(this,-1,_("Boutton1"));
        m_bouttonminimize=new wxButton(this,-1,_("Boutton 2"));
    //...
    }
     
    BEGIN_EVENT_TABLE(Interface, wxPanel)
        EVT_BUTTON(-1, Interface::OnEvtButton)
    END_EVENT_TABLE()
     
    void Interface::OnEvtButton(wxCommandEvent& event)
    {
    //on recupere l'objet qui declanché l'evt ainsi que son label
    wxButton *Pressed=(wxButton*)event.GetEventObject();
    wxString CaptionPressed=Pressed->GetLabel();
     
        //que l'on compare avec les bouttons pour determiner sur quel boutton on a clique.
        if(CaptionPressed==m_bouttonadddirectoy->GetLabel())
        {
    				//un 1er boutton
       }
        else if(CaptionPressed==m_bouttonstop->GetLabel())
        {
    			//un deuxiemme
        }
        else if(CaptionPressed==m_bouttonminimize->GetLabel())
        {
            //un troisieme ...
        }
        else
        {
            //Erreur
            wxLogError(_("Erreur du le bouton traité"));
        }
    }
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut
    Oui, mais tu avoueras d'un point de vue objet que c'est un peu tordu de faire ainsi, de passer par une unique fonction avec un design de "dispatch", plutot que de créer une fonction propre à chaque bouton. Qui plus est, il ne faut pas oublier ce que signifie en philosophie wxWidgets "-1" pour un identifiant. -1 signifie wxID_ANY. Je trouve que ca porte bien son nom. C'est utilisé seulement pour un comportement qui se doit d'être indéfini.

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Je fais cela dans mes interface quand je n'ai pas envi de polluer ma classe avec des dizaines de fonctions d'une ligne.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/05/2010, 14h00
  2. Paramètres de constructeur et MXML
    Par tafkap dans le forum Flex
    Réponses: 13
    Dernier message: 23/11/2009, 09h14
  3. info sur les paramètres de constructeur
    Par guiyomh dans le forum C++
    Réponses: 5
    Dernier message: 24/06/2008, 19h38
  4. [AS2] passer paramètre à un constructeur par attachMovie()
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 06/08/2005, 02h32

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