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 :

Greffer une fenêtre de monitoring sur une application en mode console


Sujet :

wxWidgets

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

    Informations forums :
    Inscription : Février 2006
    Messages : 127
    Points : 49
    Points
    49
    Par défaut Greffer une fenêtre de monitoring sur une application en mode console
    Bonjour, je développe actuellement une application en c++ qui fait du calcul scientifique. En fait, je désire maintenant créer une petite GUI rudimentaire pour afficher ne serait-ce qu'une barre de progression (plutôt qu'un pourcentage dans la console dos comme actuellement).

    Pour le développement et la compilation, j'utilise le couple code::block/mingw32. J'ai installé wxwidget et lorsque je compile un hello world en fenêtre trouvé sur internet, je n'ai aucun soucis.

    Mon soucis est que mon programme se lance actuellement avec une fonction main (avec des arguments en ligne de commande) et que je ne désire afficher la fenêtre de monitoring qu'au bout d'un certain moment. Hors je suis totalement débutant avec wxwidget et je ne vois pas comment créer simplement une classe avec une fenêtre que je puisse instancier à un moment donné.

    En effet, lorsque je sélectionne nouveau projet-> wxwidget basé sur une frame, code::block me génère deux classes, une classe d'application qui hérite de wxApp et une classe pour la fenêtre. J'ai extrait la classe de la fenêtre pour l'intégrer dans mon application. ça compile mais à l'exécution j'ai une erreur de segmentation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #0 004431BD	wxTopLevelWindowMSW::CreateFrame() (c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.1.2/../../../../include/c++/4.1.2/iostream:76)
    #1 00443CF4	wxTopLevelWindowMSW::Create() (c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.1.2/../../../../include/c++/4.1.2/iostream:76)
    #2 0040ECE8	wxFrame::Create() (c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.1.2/../../../../include/c++/4.1.2/iostream:76)
    #3 00401560	mFrame::mFrame(this=0x3ec3a8, parent=0x0, id=-1) (C:/distBlock/m/mMain.cpp:64)
    #4 00402CAC	main(argc=2293680, argv=0x401247) (C:/distBlock/m/main.cpp:39)
    Il y a surement des choses que je n'initialise pas ou quelque chose comme ça. Quelqu'un peut-il m'éclairer ?

    Cordialement,

  2. #2
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Salut.

    En fait, quand tu passes par un fonction "main" classique, la bibliothèque wxWidgets n'est pas initialisée correctement.

    Voici une solution à ton problème (pour le cas où tu tiendrais absolument à utiliser la console):

    Tu crées une application wxWidgets basique, avec une classe wxApp normale.
    Tu fais une classe wxDialog (ou wxFrame) pour ta barre de progression.
    Tu ajoutes une fonction virtuelle "int MyApp::OnRun()" dans laquelle tu places le code présent dans ta fonction main actuelle (il faudra sans doute adapter un peu, mais pas trop, je pense).
    Au besoin, dans cette méthode "OnRun", tu affiches ou tu caches ta fenêtre, et tu le mets à jour s'il le faut.

    Quand tu as fini ton traitement, n'oublies pas de détruire la fenetre.

    Voici un petit exemple :
    Le header de la classe d'application
    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
    #ifndef MYAPP_H_INCLUDED
    #define MYAPP_H_INCLUDED
     
    #include <wx/wx.h>
     
    class MyApp : public wxApp
    {
        public:
            virtual bool OnInit();
            virtual int OnRun();
    };
     
    DECLARE_APP(MyApp)
     
    #endif // MYAPP_H_INCLUDED
    Et le fichier 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
    #include "myapp.h"
    #include "mainframe.h"
     
    IMPLEMENT_APP(MyApp);
     
    bool MyApp::OnInit()
    {
        return true;
    }
     
    int MyApp::OnRun()
    {
        // Creation de la fenêtre
        MainFrame *frame=new MainFrame(...);
     
        // Travail sans affichage de la fenêtre
     
     
     
        // Affichage de la fenêtre
        frame->Show();
     
        // Travail avec utilisation de la fenêtre
     
     
        // Fin du travail : on detruit la fenêtre
        frame->Destroy();
     
     
        return 0;
    }
    Mais sinon, le plus simple serait de faire une application wxWidgets "classique" avec une fenêtre principale contenant une grosse zone de texte dans laquelle tu places ce que tu affiches normalement dans la console.

    Si tu as besoin de plus d'infos, n'hésites pas...

    @+
    Xav'

Discussions similaires

  1. Mettre une fenêtre en avant sur une interface VB
    Par khelilo dans le forum VB.NET
    Réponses: 3
    Dernier message: 07/03/2013, 13h49
  2. Réponses: 2
    Dernier message: 11/10/2012, 14h33
  3. Réponses: 0
    Dernier message: 07/12/2007, 13h12
  4. Requete SUM sur une table avec critère sur une autre
    Par wail00 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/05/2007, 16h58
  5. [Access] Requête sur une table et tri sur une autre
    Par VooDooS dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/08/2006, 15h07

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