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 :

MDIParentFrame et ses enfants


Sujet :

wxWidgets

  1. #1
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut MDIParentFrame et ses enfants
    Bonjour à tous !
    J'utilise wxwidgets avec le portage python (wxpython), mais aussi avec C++.
    Je rencontre avec les deux deux problèmes.
    Les fenêtres filles du Frame parent MDIChildFrame(s) si on les agrandit par le bouton prévu à cet effet remplissent la totalité de la fenêtre parent, et donc pas seulement la zone client. Dès lors on ne peut plus accéder à la fenêtre principale de l'application.
    La doc affirme pourtant que les fenêtres filles sont crées dans une mystérieuse wxMDIClientWindow, mais de fait le seul paramètre qu'on peut passer au constructeur pour le parent c'est le MDIParentFrame lui-même (tout autre est refusé). L'objet wxMDIClientWindow, bien que théorqiuement accessible par l'interface, provoque une erreur dès qu'on veut placer quoi que ce soit dedans.
    L'autre problème est lié à l'objet wxMenuBar qu'on attache nécessairement à un cadre. Cet objet arrive avec un menu en anglais 'window' prédéfini dont on ne peut se débarasser, il est à l'indice -1, et toutes les fonctions de l'interface refusent l'accès à cet indice.

  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 Zavonen,

    je n'ai pas tout compris à ce que tu veux faire mais j'ai une application qui se sert de fenêtres MDI, donc je vais essayer de t'aider.

    D'après ce que j'ai compris tu veux une Frame Parent et à l'intérieur des Frames Enfants dont la taille ne fasse pas toute la fenêtre Parent ?

    En fait il faut savoir que chaque fenêtre enfant est en fait posée sur une espèce de calque, une wxMDIClientWindow, à laquelle on ne peut pas toucher.
    Tout ce qui fait l'union entre ce calque et la fenetre enfant sera affiché, le but étant donc de regler ce calque à la taille de la fenetre enfant que tu veux.

    Imaginons que j'ai ma wxMDIParentFrame qui fasse 800 * 600, et que je veuille une fenêtre enfant qui ne fasse que 600 * 400 à l'intérieur de ma Parent, je fais :
    1) Creation de la fenêtre enfant (sans précision de taille ni de placement),
    2) fenetre_enfant->Show(true)
    3) et enfant je redefinis la taille du client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int w, h;
    // Recupère la taille de la fenêtre client au MDIChildFrame
    GetClientSize(&w, &h);
    // Refixe une nouvelle taille, -200 par exemple
    GetClientWindow()->SetSize(0, 0, w - 200 , h - 200);
    Pareil, lors d'un resize de la fenetre parent, il faut 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
     
    void CMainFrame::OnSize( wxSizeEvent& WXUNUSED(event) )
    {
    	int w, h;
     
    	// Check if there is a child window running before configuring the client window, 
    	// Otherwise it does not display the backgound
    	if ( GetActiveChild() != NULL )
    	{
    		GetClientSize(&w, &h);
    		GetClientWindow()->SetSize(0, 0, w, h);
    	}
    	else
    	{
    		GetClientWindow()->SetSize(0, 0, 0, 0);
    	}
     
    	Refresh();
    }
    Et pour finir, pour virer le menu en anglais "Window", il faut définir un flag supplémentaire à la création de ta frame MDIParentFrame, comme cela par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wxDEFAULT_FRAME_STYLE | wxFRAME_NO_WINDOW_MENU
    A plus.

  3. #3
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Merci !
    Je vais essayer tout ça à l'occasion.
    Cela paraît fort compliqué quand on vient des MFC.
    Tout se fait naturellement chez Bill, les enfants envahissent au maximum la zone client des parents, sans qu'il n'y ait rien à faire.

  4. #4
    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
    Lol ! oui, mais avec tous les desavantages connus des MFC.... qui priment desormais par leur obsolescence et leur problèmes liés à gestion de la mémoire !

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

Discussions similaires

  1. [treeview]insérer un noeud avec ses enfants
    Par new_wave dans le forum VB.NET
    Réponses: 4
    Dernier message: 14/05/2007, 16h55
  2. Trouver objets et ses enfants
    Par rod59 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 11/05/2007, 21h21
  3. [XSLT] Texte d'un élément, mais pas de ses enfants
    Par PierreY dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 28/02/2007, 10h22
  4. Réponses: 2
    Dernier message: 18/07/2006, 12h20
  5. [C#] [XML] Insérer un noeud entre un parent et ses enfants
    Par frechy dans le forum Windows Forms
    Réponses: 10
    Dernier message: 04/04/2005, 15h52

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