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 :

[MFC] Recuperation ID d'un CEdit


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut [MFC] Recuperation ID d'un CEdit
    Salut

    Voila mon code
    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
     
    void CDerfView::OnButton1() 
    {
    	// TODO: Add your control notification handler code here
    	int i = this->tab.size();
    	this->tab.push_back (i+1);
    	CEdit* pEdit = new CEdit;
    	CPoint pt(147, 14+i*50);
    	CSize sz(87,32);
    	pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,
    		CRect(pt, sz), this, this->tab[i]);
    	CString csItem; 
    	csItem.Format("%d",i); 
    	pEdit->SetWindowText(csItem);
    }
    Ceci cr�� un CEdit dynamiquement en cliquant sur le bouton1.

    Ensuite sur le bouton 2 je veux supprimer un de ces CEdit cr�� et la �a bloque.
    Je ne trouve pas comment r�cuperer l'id du CEdit qui a le focus !

    Merci d'avance !

  2. #2
    Membre �prouv�
    Inscrit en
    F�vrier 2004
    Messages
    102
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2004
    Messages : 102
    Par d�faut
    La fonction GetDlgCtrlID( ) devrait te rendre ce service ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    Mais est-ce qu'elle prend bien l'id de celui qui est selectionn� ?

  4. #4
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    pour le focus faire GetFocus().
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    int nid=GetFocus()->GetDlgCtrlID( );

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    Oui mais avec GetFocus, il me renvoie l'id du bouton sur lequel je clique !

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    void CDerfView::OnButton2() 
    {
    	// TODO: Add your control notification handler code here
    	int nid=GetFocus()->GetDlgCtrlID( );
    }
    Il me renvoie l'id du bouton d�fini dans "ressource.h"

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    En fait, quand je clique sur le bouton 2, je veux que le CEdit auquel j'avais le focus (avant que je clique sur le bouton) soit supprimer !

  7. #7
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    re,
    A ce moment la g�n�re une classe deriv�e de CEdit avec classwizard
    Tu trappes le message KILL_FOCUS dessus,
    et tu envois un mess utilisateur par postmessage � la fen�tre parent avec l�id du contr�le qui a perdu le focus .
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    GetParent()->PostMessage(WM_USER+1,0, GetDlgCtrlID( )) ;
    et surtout tu cr�es les contr�les dynamiquement avec cette classe au lieu de CEdit.
    et il faudra memoriser dans la classe parent donc le dernier id du controle qui a perdu le focus.


  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    Ca je ne sais pas comment le faire !
    Tu trappes le message KILL_FOCUS dessus,
    et tu envois un mess utilisateur par postmessage � la fen�tre parent avec l�id du contr�le qui a perdu le focus .

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    Non pardon �a y est !!

    mais j'ai un probleme pour recuperer l'id !

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    j'ai fait �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    BOOL CDerfView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
    {
    	// TODO: Add your specialized code here and/or call the base class
    	this->Cid=GetFocus()->GetDlgCtrlID( );
    	return CFormView::OnNotify(wParam, lParam, pResult);
    }
    et �a marche pas !

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    Faut-il utiliser getMessage pour recuperer le message envoy� ?
    Si oui, o� faut-il le mettre ?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    J'ai mis �a dans ma classe CderfEdit qui herite de Cedit

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    void CDerfEdit::OnKillfocus() 
    {
    	// TODO: Add your control notification handler code here
    	if (GetParent()->PostMessage(WM_USER+1,0,GetDlgCtrlID()) !=0)
    		MessageBox("ok","Erreur",MB_OK);
    }
    Et quand on clique sur les zones de CDerfEdit, il envoie bien les messages mais je ne sais pas comment les recuperer !

    Merci d'avance !

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    j'ai chang� le bouton 2 :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void CDerfView::OnButton2() 
    {
    	// TODO: Add your control notification handler code here
     
    	MSG msg;
    	GetMessage (&msg,NULL, 0,0);
     
    	CString csItem; 
    	csItem.Format("%d",msg.lParam); 
    	MessageBox(csItem,"Erreur",MB_OK);
    }

    Mais msg.lParam ne renvoie pas l'id de la cedit !

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    Personne n'a trouv� mon probl�me ?

  15. #15
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    Vu que tes contr�les sont cr�es dynamiquement je te propose cette solution :
    - g�n�re une classe d�rive de CEdit avec l�aide de ClassWizard.
    - Dans cette classe intercepte le message reflect =EN_KILLFOCUS
    - Et rajoute les portions de code suivantes :
    .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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    typedef struct
    {
    	NMHDR hdr;
    	int		idEdit;	
    }	NMMYEDIT;
     
    #define OPNEDIT_KILLFOCUS 1
     
    class CMyEdit : public CEdit
    {
    // Construction
    public:
    	CMyEdit();
     
    // Attributes
    public:
    	int m_nId;
     
    // Operations
    public:
    	void SetCtrlNotify(int nId=GetDlgCtrlID()){m_nId=nId;}
    	int   GetCtrlNotify(){return m_nId;}
     
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CMyEdit)
    	//}}AFX_VIRTUAL
     
    // Implementation
    public:
    	virtual ~CMyEdit();
     
    	// Generated message map functions
    protected:
    	//{{AFX_MSG(CMyEdit)
    	afx_msg void OnKillfocus();
    	//}}AFX_MSG
     
    	DECLARE_MESSAGE_MAP()
    };
    .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
     
    CMyEdit::CMyEdit(){m_nId=-1;}
    CMyEdit::~CMyEdit(){}
    BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
    	//{{AFX_MSG_MAP(CMyEdit)
    	ON_CONTROL_REFLECT(EN_KILLFOCUS, OnKillfocus)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    void CMyEdit::OnKillfocus() 
    {
    	// TODO: Add your control notification handler code here
    	NMMYEDIT nm;
    if(m_nId==-1)
    {
           nm.hdr.hwndFrom= GetSafeHwnd();
           nm.hdr.idFrom=GetDlgCtrlID();
    }
    else
    {
    		nm.hdr.hwndFrom=GetParent()->GetDlgItem(GetCtrlNotify())->GetSafeHwnd();
    		nm.hdr.idFrom=GetCtrlNotify();
         }
    	nm.idEdit=GetDlgCtrlID();
    	nm.hdr.code=OPNEDIT_KILLFOCUS;
     
    	GetParent()->SendMessage(WM_NOTIFY,nm.hdr.idFrom,(LPARAM)&nm);
    }
    dans la view :
    au lieu d�utiliser la classe CEdit utilise la nouvelle classe.
    Une fois l�edit cr�e appel la fonction SetCtrlNotify pour specifier le numero d�edit qui recevra toutes les notifications.
    Rajoute le code suivant dans la view.
    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
     
    BEGIN_MESSAGE_MAP(CTestdlgBarMDIView, CFormView)
    	//{{AFX_MSG_MAP(CTestdlgBarMDIView)	
    	//}}AFX_MSG_MAP
    	ON_NOTIFY(OPNEDIT_KILLFOCUS,IDC_EDIT2,OnEditKillFocus) // a rajouter manuellement.
     
    END_MESSAGE_MAP()
    void CTestdlgBarMDIView::OnInitialUpdate()
    {
    	CFormView::OnInitialUpdate();
    	ResizeParentToFit();
    	m_Edit.SetCtrlNotify(IDC_EDIT2);
    	m_Edit2.SetCtrlNotify(IDC_EDIT2);
    	m_Edit3.SetCtrlNotify(IDC_EDIT2);
    }
    void CTestdlgBarMDIView::OnEditKillFocus(NMHDR* pNMHDR, LRESULT* pResult)
    {
    	NMMYEDIT *pnm=(NMMYEDIT *)pNMHDR;
    	TRACE2("\nidorg:%d %d",pnm->idEdit,pnm->hdr.idFrom);
         // Reste a stocker l’id du contrôle qui perd le focus.
    }

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    Tu peux m'expliquer pourquoi �a ca marche pas :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void CDerfView::OnButton2() 
    { 
       // TODO: Add your control notification handler code here 
     
       MSG msg; 
       GetMessage (&msg,NULL, 0,0); 
     
       CString csItem; 
       csItem.Format("%d",msg.lParam); 
       MessageBox(csItem,"Erreur",MB_OK); 
    }

  17. #17
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    re,
    pour intercepter ton message utilisateur il faut rajouter une entree dans message_map:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    ON_MESSAGE(WM_USER+1   ,MessFromEdit)
    // ------------------------------------------------------------------
    LRESULT CDerfView::MessFromEdit(UINT wParam, LONG lParam)
    {
    	return 0L;
    }
    ou utiliser le systeme de notification que j'ai poste avec wm_notify.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    Merci beaucoup �a marche !!!

    encore Merci !!

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par d�faut
    Salut

    Un autre truc !

    Quand je clique sur classwizard il me met qu'il y a une erreur sur

    "ON_MESSAGE(WM_USER+1,MessFromEdit)"

    C'est normal ou pas ?

  20. #20
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    au lieu de WM_USER+1
    fait un define :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    #define WM_EDITKILLFOCUS WM_USER+1
    et utilise WM_EDITKILLFOCUS

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. [MFC]Recuperation d'un flottant
    Par grozero dans le forum MFC
    R�ponses: 1
    Dernier message: 28/04/2005, 17h14
  2. [MFC] Recuperation de la date de modification
    Par lastcheper dans le forum MFC
    R�ponses: 3
    Dernier message: 21/04/2005, 17h33
  3. [MFC]Recuperation de variable situ� dans un thread
    Par dreamkiller dans le forum MFC
    R�ponses: 26
    Dernier message: 05/04/2005, 15h26
  4. [MFC][Debutant] UpdateData, timer et CEdit
    Par Fladnag dans le forum MFC
    R�ponses: 2
    Dernier message: 29/01/2004, 06h51
  5. R�ponses: 6
    Dernier message: 04/01/2004, 20h59

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