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 :

Conflit entre ON_NOTIFY_REFLECT & ON_NOTIFY


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair� Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par d�faut Conflit entre ON_NOTIFY_REFLECT & ON_NOTIFY
    Bonjour,

    Je suis entrain d'installer un controle r�cup�rer sur CodeGuru ( http://www.codeguru.com/Cpp/controls...icle.php/c3987 ).

    En fait c'est une ListCtrl avec dans la premi�re colonne repr�sentant un arbre simplifier. Une sorte d'arbre simplifi� avec plusieurs colonnes.

    Pour d�tecter un clique sur un + ( ou un -, comme dans un arbre classique ), ce contr�le utilise un ON_NOTIFY_REFLECT, qui d'ailleurs le fait tr�s bien.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
    Ensuite, moi dans mon code, je veux d�tecter un clique sur une ligne pour permettre l'affichage des propri�t�s avanc�es de la ligne s�lectionn�e.
    Pour cela, j'utilise un ON_NOTIFY comme ci-dessous
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ON_NOTIFY(NM_CLICK, IDC_TREE_LIST_CONFLICTS, OnClickTreeListConflicts)
    Mais mon programme ne veut pas s'arr�ter dans ma m�thode de "Clique".
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    afx_msg void OnClickTreeListConflicts(NMHDR* pNMHDR, LRESULT* pResult);
    Par contre il s'arrete dans celle du contr�le ( gr�ce au ON_NOTIFY_REFLECT ).

    Et j'ai test� un truc, c'est d'enlever la ligne avec le ON_NOTIFY_REFLECT. Donc �videmment, le controle ne fonctionne plus correctement mais par contre le programme s'arrete bien dans MA fonction de "clique".

    Voici donc ma question :
    Comment puis-je faire pour r�cup�rer dans mon code le clique du controle ?

    Merci d'avance

  2. #2
    Membre �clair� Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par d�faut
    Je sais que cela ne fait pas longtemps mais personne n'a d'id�e. Merde alors.

    Ba en fait je m'interroge sur le sens de mon post. Il n'est peut �tre pas assez clair. Si c'est le cas, je pourrais �clairer les points obscures.

  3. #3
    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,
    tu peux montrer l'implementation du message :
    ON_NOTIFY_REFLECT(NM_CLICK, OnClick) ?



  4. #4
    Membre �clair� Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par d�faut
    Oui, je peux.

    Voici donc le code de la m�thode "OnClick"
    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
    void CTreeListCtrl::OnClick
    	(
    	NMHDR*		pNMHDR,
    	LRESULT*	pResult
    	)
    {
    	LPNMITEMACTIVATE	pItemActivate = (LPNMITEMACTIVATE)pNMHDR;
     
    	CRect				rect;
     
    	GetItemRect(pItemActivate->iItem, rect, LVIR_ICON);
     
    	if (pItemActivate->ptAction.x < rect.left)
    	{
    		LVITEM	item;
     
    		item.mask		= LVIF_INDENT | LVIF_PARAM;
    		item.iItem		= pItemActivate->iItem;
    		item.iSubItem	= 0;
    		GetItem(&item);
     
    		if (pItemActivate->ptAction.x > item.iIndent * 16)
    		{
    			if (m_tree[item.lParam].m_bCollapsed)
    			{	
    				int	nInsert = pItemActivate->iItem;
    				SetRedraw(0);
    				Expand(item.lParam, false, nInsert);
    				SetRedraw(1);
    				if ( m_tree[item.lParam].m_bHasChild )
    					SetItemState(pItemActivate->iItem, INDEXTOSTATEIMAGEMASK(2), LVIS_STATEIMAGEMASK);
    				else
    					SetItemState(pItemActivate->iItem, INDEXTOSTATEIMAGEMASK(3), LVIS_STATEIMAGEMASK);
    			}
    			else
    			{				
    				SetRedraw(0);
    				Collapse(item.lParam, pItemActivate->iItem);
    				SetRedraw(1);
    				if ( m_tree[item.lParam].m_bHasChild )
    					SetItemState(pItemActivate->iItem, INDEXTOSTATEIMAGEMASK(1), LVIS_STATEIMAGEMASK);
    				else
    					SetItemState(pItemActivate->iItem, INDEXTOSTATEIMAGEMASK(3), LVIS_STATEIMAGEMASK);
    			}
    		}
    	}
     
    	*pResult = 0;
    }
    On m'a parl� du fait de changer le code de retour avec *pResult pour permettre au code utilisant le contr�le de r�cup�rer le message du clique.
    J'ai tent� de le mettre � 1, mais cette modification n'a rien donn�e.

  5. #5
    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,
    de toute fa�on (il me semble avoir deja eu le probleme),
    si le message reflect est intercept� dans la classe parent ,le notify ne sera pas envoy� sur la classe deriv�e.
    tu peux aussi rendre la fonction virtuelle sur la classe parent et la redefinir pour completer ton test dans la classe d�riv�e..

  6. #6
    Membre �clair� Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par d�faut
    Mais en fait la classe dans laquelle j'essaye de r�cup�rer le clique n'est pas une classe d�riv�e du controle CTreeListCtrl.
    La mienne h�rite d'une CDialog classique. En fait je l'utilise comme une CListCtrl classique.
    Je ne sais pas si c'est bon.

    En dernier recourt je pourrais peu �tre cr�er une classe d�riv�e de CTreeListCtrl qui enverra un message � ma CDialog contenant la liste les informations des lignes s�lectionn�es.

    Mais j'aurais aim� �viter d'en arriver l�. Mais bon quand il faut, il faut.
    A moins que tu ai une id�e lumineuse qui m'�viterai de cr�er une classe d�riv�e et d'envoyer des messages.

  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,
    il y a une actuce possible:
    renvoyer a partir du message reflect une notification Wm_NOTIFY:
    voir ce post dans la faq :
    http://c.developpez.com/faq/vc/?page...s#PrivateNotiy
    �a devrait fonctionner ...

  8. #8
    Membre �clair� Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par d�faut
    Effectivement c'est une bonne id�e, je vais essay� et je te remercie, c'est une bonne id�e.

    Merci

  9. #9
    Membre �clair� Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par d�faut
    Je viens de faire le test avec ta methode et c'est bon.
    J'ai bien r�cup�r� le message du clique.

    Mais, on m'a egalement dis de changer le ON_NOTIFY_REFLECT par un ON_NOTIFY_REFLECT_EX qui poss�de un retour en BOOL qui permettrait de d�finir si on veut que le message soit redonn� au parent.

    Je n'ai pas eu le temps de faire le test, mais je vais essayer bient�t.

    En tout cas merci

Discussions similaires

  1. Conflit entre javascript et script ASP
    Par Mvu dans le forum ASP
    R�ponses: 2
    Dernier message: 22/02/2005, 16h28
  2. Possibles conflits entre GL, GLAUX et GLUT
    Par barthelv dans le forum GLUT
    R�ponses: 1
    Dernier message: 19/11/2004, 12h31
  3. Conflit entre bases de donn�es
    Par BRODU dans le forum Bases de donn�es
    R�ponses: 4
    Dernier message: 18/10/2004, 11h40
  4. conflit entre couleurs
    Par khayyam90 dans le forum OpenGL
    R�ponses: 2
    Dernier message: 03/07/2004, 18h00
  5. [Technique] Conflits entre plusieurs requ�tes
    Par Neowile dans le forum D�cisions SGBD
    R�ponses: 3
    Dernier message: 24/03/2003, 09h37

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