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

MFC Discussion :

fenêtre de log visual c++


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 4
    Par défaut fenêtre de log visual c++
    bonjour à tous,

    je suis débutant en visual c++. En fait, je voudrais pouvoir afficher lors de l'exécution de mon programme une fenêtre avec toute une série d'info de log. Genre afficher ce qu'il est en train de faire, les valeurs qu'il manipule, etc..

    Qu'est-ce qui serait le plus facile, est-ce que je peux utiliser un contrôle déjà existant dans les MFC ?

    grand merci d'avance.

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    C'est simple: tu utilises un simple CEdit, puis tu crée une méthode du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TraceLog(CString csLog)
    {
    CString csTemp;
    monEdit.GetText(csTemp);
    csTemp+="\r\n";
    csTemp+=csLog;
    monEdit.SetWindowText(csTemp);
    }
    Ne pas oublier je cocher "multiligne" et "want return" dans les propriétés du CEdit.

    hope it helps.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 4
    Par défaut
    Merci,

    c'est vrai que ça marche mais il y a quand même un problème, c'est qu'à première vue, j'arrive vite à la saturation d'un CString et la suite de mes caractères ne s'affiche plus. Je ne peux pas non plus vider mon CString parce que j'ai quand même beaucoup à afficher en une seule fois ....

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    ha, bon ben là il faudrait que tu sois un peu plus précis alors.
    Comment de caractères max à afficher en tout? Combien de caractères max d'un coup? Est-ce que tu veux des lignes? Ou bien tout afficher pêle-mêle? etc.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 4
    Par défaut
    et bien disons que je devrait pouvoir facilement envoyer une centaine de caractères d'un coup et je devrais envoyer quand même pas mal de lignes durant tout le programme.

    est-ce qu'il n'existe pas un moyen de réaliser cela sans rectriction de caractères ???

    Ou alors, est-ce que je pourrais envoyer ces lignes dans un fichiers qui s'afficherai automatiquement dans ma fenêtre ?

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Mmmh, étrange... la taille max d'un CString est d'environ 2Go je crois. (corrigez-moi si je me trompe, mais de toutes façons, c'est énorme). Idem pour un CEdit.

    Pour ce qui est d'utiliser un fichier, ce serait plus logique de remplir de fichier à la fin, en fonction du contenu de ton CEdit.

    Citation Envoyé par bigwill
    Je ne peux pas non plus vider mon CString parce que j'ai quand même beaucoup à afficher en une seule fois ....
    Que veux-tu dire exactement? Je le répète, un CString d'une centaine de caractère, ce n'est pas vraiment gros (si je puis me permettre cette litote. Oh et puis oui, je me permet, c'est les vacances après tout )

    Pourrais-tu être plus explicite en ce qui concerne ton bug? (ça plante à quelle ligne? message du debugger, etc.)

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Sinon, je viens de penser: il y aurait bien une autre solution: la CListBox.
    L'utilisation de cette classe te permet d'ajouter directement une chaine de carractère, donc pas besoin de récupérer son contenu (je pense que c'était ça qui posait problème). La méthode AddString() est ton amie.
    En revanche, il te faudra découper la nouvelle chaine à insérer car la CListBox ne gère pas toute seule le retour à la ligne.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 4
    Par défaut
    tu as raison, la première solution avec le CEdit ne devrait pas poser de problème et surtout pas la taille d'un CString.

    Le plus bizzare, c'est que ça plante aprés des appels succéssifs à ma fonction:

    AfficherLog(CString chaine)
    {
    CString temp;
    myLog->GetWindowText(temp);
    temp+="\r\n";
    temp+=chaine;
    myLog->SetWindowText(temp);
    }

    Mais ça plante à un endroit où ça n'a rien à voir, où ma fonction n'est même pas appelée. Et quand je met en commentaire toute la fonction et que je fais juste ça :

    AfficherLog(CString chaine)
    {
    myLog->SetWindowText(chaine);
    }

    ben ça fonctionne mais bon évidemment je n'ai que la dernière ligne ...

    Il n'y aurait pas un prob avec les allocations pour la CString temp ????

  9. #9
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Oui, il est possible que le SetWindowText génère une exception si le texte est trop grand. (Ou peut-être le GetWindowText).

    C'est pour ça que je te conseille la deuxième solution: un CListBox
    il te faut
    1/ une fonction qui découpe la chaine que tu va insérer dans ta CListBox
    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
     
    //cette fonction prend une CString, retourne un CString composée des iNbCharParLigne premiers caractères et supprime ces premiers caractères du buffer
    CString DecoupeString(CString csBuffer, int iNbCharParLigne)
    {
        CString csRet = csBuffer.Left(iNbCharParLigne);
        if (csBuffer.GetLength()>iNbCharParLigne)
        {
            csBuffer = csBuffer.Right(csBuffer.GetLength()-iNbCharParLigne);
        }
        else
        {
            csBuffer="";
        }
        return csRet;
    }
    2/ Une fonction qui ajoute un log dans ta CListBox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    AjouteLogDansListBox(CString csLog)
    {
        int iNbChar = 10; //ce que tu veux
        CString csTemp = DecoupeString(csLog, iNbChar);
        while (!csTemp.IsEmpty())
        {
            MaListBox.AddString(csTemp);
            csTemp = DecoupeString(csLog, iNbChar);
        }
    }
    Je pense que c'est propre et efficace. Attention à bien paramétrer ta CListBox dans l'éditeur de ressource.

    P.S: je n'aime pas faire le travail des modos, mais ils n'ont pas que ça à faire, alors je vais te donner quelques conseils sur la façon de poster:
    1/ utilise les balises, surtout la balise [code]. C'est une question de lisibilité.
    2/ apprends à nommer correctement tes variables (préfixes cs<->CString, i<->int, etc.) comme ça, on sait tout de suite de quel type est la variable.
    3/ essaie d'être le plus précis possible, ça fait gagner du temps aux gens qui vont essayer de te répondre, et comme disait je sais plus qui:
    Le temps et l'espace sont infinis, c'est pourtant ce qui me manque le plus.
    Sur ce, bonne implémentation. Ne prends pas mal mes remarques, c'est juste pour aider. Et n'hésite surtout pas à poser des questions.

    Hope it helps.

  10. #10
    fd
    fd est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    sinon tu peux utiliser une console

    j'avais fait une petite classe pour debug (d'ou les #ifdef)

    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
     
     
    // ouvre une console pour debug (si TRACE_CONS defini)
     
    class Cconsole {
    	HANDLE m_hCons;
    public:
    	Cconsole();
    	~Cconsole();
    	void WriteStr(char *p);
    	void Printf(char *p,...);
     
    };
     
    Cconsole::Cconsole()
    {
    #ifdef TRACE_CONS
    	AllocConsole();
    	m_hCons = GetStdHandle(STD_OUTPUT_HANDLE);
    #endif
    }
     
    Cconsole::~Cconsole()
    {
    #ifdef TRACE_CONS
    	FreeConsole();
    #endif
    }
     
     
    void Cconsole::WriteStr(char *p)
    {
    #ifdef TRACE_CONS
    	DWORD num;
    	WriteConsole(m_hCons,p,strlen(p),&num,NULL);
    #endif
    }
     
    void Cconsole::Printf(char *p,...)
    {
    #ifdef TRACE_CONS
    	char Buffer[512];
    	va_list marker;
    	va_start( marker, p );
    	vsprintf(Buffer,p,marker);
    	va_end(marker);
    	DWORD num;
    	WriteConsole(m_hCons,Buffer,strlen(Buffer),&num,NULL);
    #endif
    }

Discussions similaires

  1. Utiliser les threads pour créer une fenêtre de LOG ?
    Par davidmarli dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2011, 15h01
  2. Création d'une fenêtre ancrable dans visual studio
    Par Overkill78 dans le forum VB.NET
    Réponses: 5
    Dernier message: 08/06/2009, 10h02
  3. Faire une fenêtre de log "au fil de l'eau"
    Par tio dans le forum Zend Framework
    Réponses: 1
    Dernier message: 20/02/2009, 18h54
  4. Gerer plusieurs fenêtre WinForms avec Visual C++ 2008
    Par jlg_47 dans le forum Débuter
    Réponses: 5
    Dernier message: 25/01/2009, 20h48
  5. Afficher une fenêtre de logging / debugging
    Par tnarol dans le forum MFC
    Réponses: 8
    Dernier message: 12/05/2006, 15h24

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