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 :

probleme avec wxNoteBook


Sujet :

wxWidgets

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Par défaut probleme avec wxNoteBook
    Salut à tous !

    Je suis nouveau sur le forum, et j'aimerais avoir votre aide.
    je vous remercie d'avance.

    voilà j'ai un problème lors de la fermeture d'une boite de dialogue.ma boite de dialogue (un wxDialog) contient un wxPanel qui lui contient un wxNotebook et celui ci des pages wxPanel.
    je travaille sous Code::Blocks. la boite de dialogue se lance sans problème mais lorsque je la ferme le processus se termine par un état -1. (je précise que j'ai défini l'événement EVT_CLOSE(Dialogue::OnClose) )
    et pourtant je crois avoir suivi la bonne méthode d'après ici :
    http://wiki.wxwidgets.org/WxNoteBook

    J'ai aussi remarqué que si je mettais directement le wxNotebook dans ma boite de dialogue le problème ne se posait pas.Et pourtant cette méthode est déconseillée.

    Quel est le problème?
    comment régler ce problème?

  2. #2
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Bonjour et bienvenu sur le forum,

    Citation Envoyé par Minimum
    la boite de dialogue se lance sans pb mais lorske je la ferme le processus se termine par un etat -1
    C'est quoi le problème exact lorsque la fenêtre se ferme ?
    Car là c'est, très vague...

    Citation Envoyé par Minimum
    (je precise que j'ai defini l'evenement EVT_CLOSE(Dialogue::OnClose) )
    Et qu'est ce qui se passe dans "Dialogue::OnClose" ?

    Il nous faudrait voir un peu de code et les messages d’erreur à la fin de l’exécution.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Par défaut
    Merci !
    je m'excuse pour les différentes fautes d'orthographes et aussi pour l'absence de code.
    voilà voici un extrait de 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
    Dialogue::Dialogue() : wxDialog(NULL,wxID_ANY,wxT("Dialogue"))
    {
        wxBoxSizer *main_sizer = new wxBoxSizer(wxVERTICAL);
        main_window = new wxPanel(this,wxID_ANY);
        wxBoxSizer *main_sub_sizer = new wxBoxSizer(wxVERTICAL);
        noteBookTab = new wxNotebook(main_window,NoteBookTab_Event);
     
        /*creation of the tabs*/
        frame_type_options = FrameTypeOptions(noteBookTab);
        rate_control = RateControl(noteBookTab);
        analysis = Analysis(noteBookTab);
        input_output = Output(noteBookTab);
     
        /*adding tabs to the noteBookTab*/
        noteBookTab->AddPage(frame_type_options,_T("Frame-Type Optionss"));
        noteBookTab->AddPage(rate_control,_T("Rate Control"));
        noteBookTab->AddPage(analysis,_T("Analysis"));
        noteBookTab->AddPage(input_output,_T("Input/Output"));
     
        /*add noteBookTab in the main panel*/
        main_sub_sizer->Add(noteBookTab,0,wxALL|wxEXPAND,5);
        main_window->SetSizer(main_sub_sizer);
        main_sub_sizer->SetSizeHints(main_window);
     
        /*creation of the window*/
        main_sizer->Add(main_sub_sizer,0,wxALL|wxEXPAND,5);
     
        SetSizer(main_sizer);
        main_sizer->SetSizeHints(this);
    }
     
    Dialogue::~Dialogue()
    {
    }
    et puis loin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void Dialogue::OnClose(wxCloseEvent& event)
    {
          Destroy();
    }
    les panels inclus dans le wxnotebook sont crées par des fonctions.
    je compile sans problème et l'exécution se fait sans problème. Mais lorsque je ferme la fenêtre (la boite de dialogue) elle se ferme mais l'application reste en exécution, ce qui fait que je suis obligé de cliquer sur stop (croix rouge qui permet d'arrêter l'éxecution) dans l'IDE Code::Blocks.Et alors j'obtiens ce message dans l'onglet Build log de l'IDE:
    Process terminated with status -1 (0 minutes, 9 seconds)

    J'ai essayé sur une autre boite de dialogue tres simple sans wxnotebook et elle se ferme sans problème ainsi que l'exécution. l'IDE me dit bien que le processus s'est bien terminé :
    ( dans le Build log)
    Process terminated with status 0 (0 minutes, 7 seconds)
    Je crois donc que le problème vient du wxnotebook et pourtant j'ai suivi la methode recommandée.

    J'espère que j'ai été un peu plus clair
    Je vous remercie

  4. #4
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    L'erreur vient de cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    main_sizer->Add(main_sub_sizer,0,wxALL|wxEXPAND,5);
    Il ne faut pas ajouter le sizer de main_window, mais directement main_window.

    Une version plus "propre" du 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
     
    Dialogue::Dialogue() : wxDialog(NULL,wxID_ANY,wxT("Dialogue"))
    {
        wxBoxSizer *main_sizer = new wxBoxSizer(wxVERTICAL);
        wxPanel *main_window = new wxPanel(this,wxID_ANY);
        wxBoxSizer *main_sub_sizer = new wxBoxSizer(wxVERTICAL);
        wxNotebook *noteBookTab = new wxNotebook(main_window, wxID_ANY);
     
        /*creation of the tabs*/
        frame_type_options = FrameTypeOptions(noteBookTab);
        rate_control = RateControl(noteBookTab);
        analysis = Analysis(noteBookTab);
        input_output = Output(noteBookTab);
     
        /*adding tabs to the noteBookTab*/
        noteBookTab->AddPage(frame_type_options,_T("Frame-Type Optionss"));
        noteBookTab->AddPage(rate_control,_T("Rate Control"));
        noteBookTab->AddPage(analysis,_T("Analysis"));
        noteBookTab->AddPage(input_output,_T("Input/Output"));
     
        /*add noteBookTab in the main panel*/
        main_sub_sizer->Add(noteBookTab,1,wxALL|wxEXPAND,5);
        main_window->SetSizer( main_sub_sizer );
     
        main_sizer->Add(main_window,1,wxALL|wxEXPAND,5);
     
     
        this->SetSizer( main_sizer );
        this->Layout();
     
        this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( Dialogue::OnClose ) );
    }
     
    Dialogue::~Dialogue()
    {
    }

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Par défaut
    Merci beaucoup Ti-R
    le problème venait justement de là. j'ai rectifié cela et la boite de dialogue se ferme proprement maintenant.

    Mais je profite aussi pour poser d'autres questions.
    Tout d'abord lorsque je vois le code :
    Citation Envoyé par Ti-R
    this->SetSizer( main_sizer );
    this->Layout();

    this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( Dialogue::OnClose ) );
    Pourquoi avoir utiliser this->Layout() et avoir supprimé main_sizer->SetSizeHints(this) ( et aussi main_sub_sizer->SetSizeHints(main_window) )

    Et aussi pourquoi avoir utilisé this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( Dialogue::OnClose ) )
    ( Vous m'excusez de toutes ces questions. Je suis novice dans la programmation WxWidgets)

  6. #6
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    J'avais oublié l'utilisation de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EVT_CLOSE(Dialogue::OnClose)
    C'est exactement la même chose que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( Dialogue::OnClose ) );
    (Ne pas utiliser les 2 en même temps, cela n'a aucun sens)

    "Connect" permet de lier des événements dynamiquement. Dans ce cas la, il n'y a pas vraiment d'avantage à l'utiliser (sauf enlever les macros dans le .h/.cpp), mais si on souhaite un moment donné déconnecter un événement ou faire de la redirection d’événement ou encore attaché des événements sur des éléments inconnus, cela peut être indispensable.

    Pas besoin de "SetSizeHints" dans beaucoup de cas.
    Par contre il faut jouer sur le "Add" des "Sizer" avec le "wxEXPAND" et le "0 ou 1" du second paramètre.
    Pour les
    C’est la même chose que
    Pour créer rapidement du GUI, je conseil wxFormBuilder(Parfois il ajoute un poil de code en trop, mais on est sur que cela fonctionne à 100% et cela permet de générer le code très rapidement.)

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

Discussions similaires

  1. probleme avec les wxNoteBook
    Par CaptainChoc dans le forum wxWidgets
    Réponses: 9
    Dernier message: 07/11/2006, 13h50
  2. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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