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 :

Affichage de traces en temps réel -- CEdit


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Points : 71
    Points
    71
    Par défaut Affichage de traces en temps réel -- CEdit
    Salut,

    Je dois faire une petite fenetre où je dois afficher des traces en temps réel.
    Je veux utiliser un CEdit pour y afficher du texte et je souhaite interdire à l'utilisateur décrire dans cet Edit. Pour cela j'utilise l'option ES_READONLY mais le font du Edit change de couleur et prend la couleur de la fenetre qui le contient et du coup ça devien moche de chez moche

    Est ce qu'il y a un moyen d'interdire l'ecriture sans modifier l'apparence du CEdit?

    J'ai fais des recherches sur le net pour voir s'il y a d'autres control à utiliser mais j'ai pas trouvé grande chose! Me conseillez vous autres controls?

    Merci

  2. #2
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    Salut,

    Tu mets ton 'CEdit' avec le style ES_READONLY.
    Tu interceptes le message WM_CTLCOLOR dans la fenetre parente, et tu l'ajustes aux couleurs que tu souhaites.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    HBRUSH CParentWnd::OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor)
    {
      if (nCtlColor==CTLCOLOR_STATIC && pWnd==m_pEditCtrl)
        return DefWindowProc(WM_CTLCOLOREDIT,(WPARAM)pDC->m_hDC,(LPARAM)pWnd->m_hWnd);
      else
        return CBaseWnd::OnCtlColor(pDC,pWnd,nCtlColor);
    }
    A adapter: CParentWnd, m_pEditCtrl et CBaseWnd

    @+

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Points : 71
    Points
    71
    Par défaut
    Salut,

    Je suis débutant avec les mfc donc j'ai pas trop compris ce que tu as dit.

    Je t'explique j'ai une classe qui sappelle CFentreTrace (qui dérive de CDialog) : c'est lé où je crée dynamiquement mon CEdit.

    Si j'ai bien compris CParentWnd est dans mon cas CFentreTrace et le m_pEditCtrl est un pointeur sur le CEdit que je souhaite manipuler (je peux le récuperer en faisant ((CEdit *)GetDlgItem(IDC_CEDIT1))) mais la classe CBaseWind je vois pas qu'est ce que ça peut etre. Est ce CDialog??

    Et puis je vois pas comment intercepter le message WM_CTLCOLOR?? J'ai regarder sur le site de Microsoft mais g pas trouvé grande chose

    Comment je peux intercepter ce message?

    Merci pour ton aide!

  4. #4
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    CParentWnd=CFentreTrace
    CBaseWnd=CDialog

    Pour intercepter le message:

    Dans le fichier Header de ta classe CFentreTrace, ajouter le prototype suivant comme fonction de la classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor);

    Dans le code de ta classe CFentreTrace, ajouter la ligne suivante entre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    BEGIN_MESSAGE_MAP(CFentreTrace)             // normalement ça ça y est déjà
     
      ....
     
      ON_WM_CTLCOLOR()                // ligne à ajouter
     
      ....
     
    END_MESSAGE_MAP()
    Puis écrire la fonction suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    HBRUSH CFentreTrace::OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor)
    {
      if (nCtlColor==CTLCOLOR_STATIC && pWnd->GetDlgCtrlID()==IDC_CEDIT1)
        return DefWindowProc(WM_CTLCOLOREDIT,(WPARAM)pDC->m_hDC,(LPARAM)pWnd->m_hWnd);
      else
        return CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
    }
    Ton CEdit aura alors les meme couleurs que s'il n'était pas ES_READONLY.

    @+

    Edit: correction d'une petite boulette (pWnd->GetDlgCtrlID() est mieux que GetDlgCtrlID(pWnd), quoique ça marche aussi )

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Points : 71
    Points
    71
    Par défaut
    supeeeeeeer, ça marche nickel

    Vraiment merci beaucoup

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

Discussions similaires

  1. [2008R2] Affichage des performances en temps réel
    Par Hiken dans le forum Développement
    Réponses: 4
    Dernier message: 01/07/2013, 17h50
  2. Réponses: 2
    Dernier message: 21/03/2013, 10h50
  3. MFC - affichage de données en temps réel
    Par limprid dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2012, 20h04
  4. Affichage signal audio en temps réel
    Par Uren dans le forum C#
    Réponses: 8
    Dernier message: 28/09/2011, 19h49
  5. Affichage d'un compteur temps réel
    Par Karcynotron dans le forum MFC
    Réponses: 1
    Dernier message: 27/05/2008, 21h47

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