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 :

Bug avec wxFrame::GetPosition()


Sujet :

wxWidgets

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Par défaut Bug avec wxFrame::GetPosition()
    Bonjour alors voila mon programme bug quand il appele la function suivant:
    wparent->GetPosition();

    voici le code:

    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
    40
    41
    42
    43
    44
     
    //---- main.cpp
    bool MyApp::OnInit() 
            MainFrame *frame = new MainFrame( _T("Vicia GUI"), wxPoint(1500,50), wxSize(600,400) );
    	frame->Show(TRUE);
    }
     
    //---- MainFrame.cpp
     
    MainFrame::MainFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
    : wxFrame((wxFrame *)NULL, wxID_ANY, title, pos, size) {
     
    ....
    MainMenuBar *menuBar = new MainMenuBar(this);
     
    }
     
     
    //----- MainMenuBar.h
    class MainMenuBar: public wxMenuBar {
    public:
    	MainMenuBar(wxFrame* wparent_);
    ...
    	void OnProperties(wxCommandEvent& event);
     
    private:
    	wxFrame* wparent;
    }
     
    //---- MainMenuBar.cpp
    MainMenuBar::MainMenuBar(wxFrame *wparent_)
    	:wparent(wparent_)
    {
    ...	  this->Connect(wxID_PROPERTIES,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(MainMenuBar::OnProperties));
    ..
    }
     
     
    void MainMenuBar::OnProperties(wxCommandEvent& WXUNUSED(event)) {
    //BEFORE BUG
    	wxPoint pos = wparent->GetPosition();
    //AFTER BUG
     
    }
    Et je comprend pas du tout d'où viens le problème, si qqun a déjà eu ce genre de problème ça serait sympa de commenter

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Citation Envoyé par elraton Voir le message
    Bonjour alors voila mon programme bug quand...
    Mais encore? Arrêt pur et simple? Access violation?

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Par défaut
    Salut,
    en fait je crois avoir trouver la solution mais je ne suis pas sûr de l'explication!

    Comme la methode connect est appeler avec wparent->Connect() et non avec this->Connect(), les pointeurs this et wparent se swap!

    Je me retrouve avec les adresses suivantes:

    dans le constructeur MainMenuBar::MainMenuBar() :
    this = 23A80A8
    wparent = 23A75B0


    alors que dans void MainMenuBar::OnProperties() :
    this=23A75B0
    wparent=23A80A8


    Le bug est donc bien corrigé mais je ne comprend pas pourquoi ces valeurs sont swappées... Moi qui voulais simplifier le code en mettant le menuBar dans une classe... tant pis

    Voila la correction
    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
     
    MainMenuBar::MainMenuBar(wxFrame *wparent_):wparent(wparent_)
    {
    	menuPref = new wxMenu();
    	menuPref->Append(wxID_PROPERTIES,_T("&Properties"));
    	wparent->Connect(wxID_PROPERTIES,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(MainMenuBar::OnProperties));
    	this->Append(menuPref,_T("Preferences"));
     
    	wxPoint pos = wparent->GetPosition();
    	wxMessageBox(wxString::Format(_T("position = [%d,%d] ; adrr=(this,wparent)=%x,%x"),pos.x,pos.y,this,wparent), wxT("1st box"),	wxOK | wxICON_INFORMATION, this);
    }
     
    void MainMenuBar::OnProperties(wxCommandEvent& WXUNUSED(event)) {
    	wxPoint pos = this->GetPosition();
    	wxMessageBox(wxString::Format(_T("position = [%d,%d] ; adrr=(this,wparent)=%x,%x"),pos.x,pos.y,this,wparent), wxT("1st box"),	wxOK | wxICON_INFORMATION, this);
    }

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

Discussions similaires

  1. Bug avec le test de profondeur
    Par Tellmarch dans le forum OpenGL
    Réponses: 1
    Dernier message: 17/10/2004, 00h59
  2. Bug avec requete
    Par arsgunner dans le forum ASP
    Réponses: 8
    Dernier message: 14/06/2004, 16h25
  3. [C#] Bug (?) avec la propriété TransparencyKey de la Form
    Par FrigoAcide dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/05/2004, 14h14
  4. [CR9] Bug avec les champs à valeur vide ?
    Par Djob dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 15/07/2003, 21h21

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