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 :

wxWidgets : fenetres enfants...


Sujet :

wxWidgets

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 21
    Points : 10
    Points
    10
    Par défaut wxWidgets : fenetres enfants...
    J'essaye de créer des fenetres de "modules" avec wxWidgets (pas des wxModules... enfin j'ai regardé mais j'ai pas tout compris et y a pas beaucoup de doc sur le sujet...) pour une application...

    Mon problème, c'est que quand j'ouvre une nouvelle frame, elle se voit dans les fenetres ouvertes (comme si on j'ouvrais une nouvelle application), et je peut fenetre principale sans fermer les fenetres filles....

    Voici mon code pour l'ouverture des fenetres filles :
    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
    class My_Module : public wxFrame {
        public:
            My_Module(const wxString& title , const wxPoint& pos , const wxSize& size , long style = wxDEFAULT_FRAME_STYLE);
     
        DECLARE_EVENT_TABLE()
    };
     
    BEGIN_EVENT_TABLE(My_Module, wxFrame)
    END_EVENT_TABLE()
     
    My_Module::My_Module(const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxFrame(NULL, -1, title, pos, size, style) {
        SetIcon(wxICON(monicone));
        SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
        this -> Show(true);
    }
    J'en ai conclu que je devait pas utiliser une classe dérivée de wxFrame... mais alors je la prend a partir de quoi ?? J'ai essayé wxDialog mais quand la fenetre est ouverte, j'ai plus accès a l'appli principale, j'ai regardé la doc et a part wxModule, je voit pas grand chose qui pourrait convenir, mais je comprend absolument rien et sur google, c'est un peu pauvre...

    Alors si quelqu'un a une idée...

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Une wxWindow ne convient pas ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Peut etre bien... mais j'arrive pas du tout a en créer... Enfin les créer, si mais rien ne s'affiche a l'écran.... En gros, c'est comme si j'ouvrai rien....

    Voila ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class My_Mod : public wxWindow {
        public :
            My_Mod(wxWindow* parent , wxWindowID id , const wxPoint& pos = wxDefaultPosition , const wxSize& size = wxDefaultSize , long style = 0 , const wxString& name = wxPanelNameStr);
    };
     
    My_Mod::My_Mod(wxWindow* parent , wxWindowID id , const wxPoint& pos , const wxSize& size , long style , const wxString& ) {
    }
    et voila comment je l'appel depuis un wxFrame :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    My_Mod *M = new My_Mod ( this , -1 , wxPoint(150, 150) , wxSize(400, 150) );
    J'oubli peut etre quelque chose pour que ca s'affiche mais je sais vraiment pas quoi....

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ta fenêtre s'ouvre dans le wxFrame puisque tu as décidé que le wxFrame serait le père de ta fenêtre.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Oui..... C'est bien ce que j'avais compris mais.. la fenetre ne s'affiche pas....
    Y aurait pas une manip genre My_Mod->Show() ou quelque chose du genre ??

    Bon en tout cas, je te met mon code ici... tu vera peut etre mieux que moi les erreurs...

    Def_App.h :
    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
    //////////////////////////////////////////////////
    // Class Application :
    class MyApp : public wxApp {
        public:
            virtual bool OnInit();
    };
     
    //////////////////////////////////////////////////
    // Class window :
    class My_Mod : public wxWindow {
        public :
            My_Mod(wxWindow* parent , wxWindowID id , const wxPoint& pos = wxDefaultPosition , const wxSize& size = wxDefaultSize , long style = 0 , const wxString& name = wxPanelNameStr);
    };
     
    //////////////////////////////////////////////////
    // Class Frame :
    class My_Win : public wxFrame {
        public :
            My_Win(const wxString& title , const wxPoint& pos , const wxSize& size , long style = wxDEFAULT_FRAME_STYLE);
     
        private :
            DECLARE_EVENT_TABLE();
    };
     
    BEGIN_EVENT_TABLE(My_Win, wxFrame)
     
    END_EVENT_TABLE()
    main.cpp :
    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
    45
    46
    47
    48
    49
    50
    51
    #include "wx/wxprec.h"
     
    #ifdef __BORLANDC__
    #pragma hdrstop
    #endif
     
    #ifndef WX_PRECOMP
    #include "wx/wx.h"
    #endif
    //------------------------------------------------------------------------------
     
     
    #ifndef Titre_App
    #define Titre_App "Titre de l'appli"
    #endif
     
     
    #include "Def_App.h"
     
     
    //////////////////////////////////////////////////
    // Innit Application :
    IMPLEMENT_APP(MyApp)
     
    bool MyApp::OnInit() {
        My_Win *Win = new My_Win(Titre_App , wxPoint(150, 150), wxSize(400, 500));
        Win -> Show(true);
     
        return (true);
    }
     
    //////////////////////////////////////////////////
    // Innit Window :
    My_Mod::My_Mod(wxWindow* parent , wxWindowID id , const wxPoint& pos , const wxSize& size , long style , const wxString& ) {
        if ( this->IsEnabled() ) {
            wxMessageBox("OK" , "Rechercher");
        } else {
           wxMessageBox("PO OK" , "Rechercher");
        }
    }
     
    //////////////////////////////////////////////////
    // Innit Frame :
    My_Win::My_Win(const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxFrame(NULL, -1, title, pos, size, style) {
        SetIcon(wxICON(monicone));
        SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
     
        My_Mod *M = new My_Mod ( this , -1 , wxPoint(150, 150) , wxSize(400, 150) );
     
        My_Win::AddChild(M);
    }

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2002
    Messages : 48
    Points : 44
    Points
    44
    Par défaut
    effetctivement il faut utiliser la directive Show sur ta wxFrame...

    ensuite regardes les flags pour savoir comment afficher :

    wxFRAME_NO_TASKBAR :
    Creates an otherwise normal frame but it does not appear in the taskbar under Windows or GTK+ (note that it will minimize to the desktop window under Windows which may seem strange to the users and thus it might be better to use this style only without wxMINIMIZE_BOX style). In wxGTK, the flag is respected only if GTK+ is at least version 2.2 and the window manager supports _NET_WM_STATE_SKIP_TASKBAR hint. Has no effect under other platforms.

    Je ne suis pas d'acc avec toi quand tu dis qu'il n'y a pas de doc: toutes l'API est la:
    http://www.wxwidgets.org/manuals/2.6.1/wx_contents.html

    Et surtout tu as tous les exemples dans le dossier 'sample' de wxWidgets !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Merci pour le lien mais.... c'est la doc qui est fournie avec wxWidget ni plus ni moins.... (dossier docs\htmlhelp, fichier wx.chm) et je l'ai pas mal regardée.... elle est plutot bien fichue mais je suis loin d'etre bon en anglais alors....

    Bon, je vais essayé de faire certains samples mais il me semble que j'avais déjà essayé et y en a certain que j'arrive pas a compiler (je me plante peut etre hein)...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Ca y est... j'ai réussit... En fait, suffit juste d'appeller une wxFrame (et pas une window) et de l'appeller (par exemple) comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    My_Mod *M = new My_Mod ( Titre_App , wxPoint(150, 150), wxSize(700, 500) , wxDEFAULT_FRAME_STYLE | wxWS_EX_BLOCK_EVENTS );
    (moi je dit ca, au cas ou ca peut servir a quelqu'un)...

    Bon maintenant, je rechercher comment empecher les gens de recadrer la fenetre...

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ca, tu le trouveras sans doute exactement au même endroit.

Discussions similaires

  1. [Swing] fermer une fenetre enfant avec un bouton.
    Par TheSeb dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 23/11/2013, 13h42
  2. Réponses: 9
    Dernier message: 25/07/2006, 11h18
  3. comment fermer une fenetre enfant
    Par stefane1981 dans le forum MFC
    Réponses: 12
    Dernier message: 20/10/2005, 12h32
  4. [WxWidgets] Fenetre plein écran ?
    Par djar dans le forum OpenGL
    Réponses: 1
    Dernier message: 28/03/2005, 16h53
  5. [BPW]Raccourcis clavier dans une fenêtre enfant
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 18/02/2004, 21h07

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