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 :

Mettre le curseur en bas dans un IDC_EDIT


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut Mettre le curseur en bas dans un IDC_EDIT
    Bonjour,

    Je suis sur Visual C++ 2008 et j'utilise un 'Edit control' dans la ressource. Je n'utilise donc pas "normalement" un CEdit (ou alors, je ne le vois pas) mais 'IDC_EDIT'.

    J'ai donc mis dans MyView.h :
    Dans MyView.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void MyView::DoDataExchange(...)
    {
            (...)
      	DDX_Text(pDX, IDC_EDIT, m_StrEdit);
    }
     
    (...)
     
    void MyView::FctRépétitive()
    {
    	m_StrEdit += oss.str().c_str();
    	SetDlgItemText(IDC_EDIT,m_StrEdit);
    }
    Je n'arrive pas à trouver comment mettre le curseur de l'edit control vers le bas (ou voir directement le bas du texte), pour qu'on puisse voir le dernier rajout de m_StrEdit.

    Et si quelqu'un pouvait m'expliquer en même temps ce qu'est la fonction DoDataExchange, je l'en remercie d'avance.

    Christophe

  2. #2
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Par défaut
    Je pense que ce problème rejoint celui que j'avais posté : Défilement dans des CEdit

    La méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	UpdateData(FALSE);
    	m_edit1.SetFocus();
    	keybd_event(VK_CONTROL,0x9d,0 , 0);
    	keybd_event(VK_END,0,0,0); 
    	keybd_event(VK_END,0,KEYEVENTF_KEYUP,0); 
    	keybd_event(VK_CONTROL,0x9d,KEYEVENTF_KEYUP,0);
    marche de manière plutôt aléatoire (j'ai l'impression que certains UpdateData() réinitialise la position CEdait).

    Donc si quelqu'un a une idée pour que "l'ascenseur" reste en bas tout le temps .. !

    cricri-larson tu peux toujours essayer le code si dessus, dans ta situation ça pourrai marcher.

    Pour DoDataExchange(), en gros ça lie les contrôles aux variables que tu leurs crées (ça permet à l'application de savoir que si le contrôle bouge la variable aussi et vice-versa).
    Pour le fonctionnement exact, je sais pas dire.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut
    Mais comment je peux récupérer 'm_edit1' ?

  4. #4
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Par défaut
    Tu rajoutes une variable de type contrôle ton CEdit dans l'éditeur de ressource.

    Ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            CString m_StrEdit;
            CEdit m_ctrlEdit;
     
            void MyView::DoDataExchange(...)
    {
            (...)
      	DDX_Text(pDX, IDC_EDIT, m_StrEdit);
      	DDX_Control(pDX, IDC_EDIT, m_ctrlEdit);
    }

  5. #5
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    cricri-larson tu fais une grave confusion entre l'objet graphique et la variable de contrôle (le fameux CEdit et non un CString !!!).

    Avec quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CEdit m_edit1;
     
     ...
     
    DDX_Control(pDX, IDC_EDIT, m_edit1);
    ça devrait t'éclairer un peu je pense.

    Si après tu veux récupérer le texte sous la forme d'un CString utilise GetWindowText (pour plus d'info voir la msdn (où tu trouveras entre autre comment te placer à la fin du texte)).

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Utiliser un CString pour lier la valeur du CEdit avec un membre est une bonne chose. DoDataExchange est une fonction appelée pour transférer les données depuis l'objet MyView vers les contrôles ou dans l'autre sens. Les fonctions DDX_Text te masquent la mécanique interne. Il faut rester avec cette approche.

    Ensuite, pour ton problème spécifique, tu peux récupérer un contrôle à tout moment avec GetDlgItem() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CEdit *p_edit = (CEdit*)GetDlgItem(IDC_EDIT);
    if(p_edit){}
    Pour ton problème de curseur, je crois qu'il n'existe rien pour cela. De mémoire, on feinte en utilisant CEdit::SetSel et en choisissant le caractère après le dernier.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut
    Heu heu effectivement, j'ai loupé pas mal de chapitres là sur l'apprentissage de Visual C++.

    J'y arrive maintenant, avec les 2 possibilités... (DDX_Control et le GetDlgItem()), je ne vois pas encore c'est quoi le mieux, mais c'est surement en fonction du programme qu'on veut produire je suppose.

    Merci à tous en tout cas pour ces précisions qui m'ont fait comprendre pas mal de choses.

    Bonne journée

  8. #8
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Par défaut
    CEdit::SetSel marche mais avec le même problème que l'autre méthode : le CEdit a vite fait de se retrouver en haut de nouveau !

    Des qu'un autre contrôle lance une action, hop, on remonte tout en haut ! (du coup, si je descend un de mes deux CEdit, l'autre remonte !).

    Enfin tant pis, je regarderais pour biaiser le truc plus tard (du genre insérer les nouvelles lignes en tête !), pour l'instant c'est pas le soucis majeur !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/10/2009, 21h27
  2. Mettre le curseur dans un contrôle TextBox
    Par Angelique64 dans le forum VB.NET
    Réponses: 8
    Dernier message: 06/07/2009, 22h52
  3. Mettre le curseur par défaut dans un TextBox
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/03/2009, 14h54
  4. Mettre une note de bas de page \footnote dans une légende d'image \caption
    Par Lyana dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 9
    Dernier message: 04/08/2008, 16h58
  5. Réponses: 3
    Dernier message: 11/10/2005, 19h13

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