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] appeler OnRButtonUp de la vue parente


Sujet :

MFC

  1. #1
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut [MFC] appeler OnRButtonUp de la vue parente
    Bonjour,

    J'ai cree un nouveau type de controle. Je voudrais que lorsque l'on clique avec le bouton droit sur celui-ci, la methode OnRButtonUp de la vue qui contient ce controle soit appelee. Du coup, dans le code du controle j'ai ajoute la methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void CTreeList::OnRButtonUp(UINT nFlags, CPoint point) 
    {
    	// TODO: Add your message handler code here and/or call default
    	CWnd * parent = this->GetParent();
      parent->OnRButtonUp(nFlags, point);
     
    	CTreeCtrl::OnRButtonUp(nFlags, point);
    }
    Mais j'ai l'erreur suivante:

    error C2248: 'OnRButtonUp' : cannot access protected member declared in class 'CWnd'
    Comment puis-je faire pour atteindre cette methode ?

  2. #2
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    moi je ferais un PostMessage au parent ...


  3. #3
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    bon deja il fallait ou trouver l'erreur parce qu'il y a 3 OnRButtonUp dans tes 4 lignes de code.

    je suppose que c'est celui la

    parent->OnRButtonUp(nFlags, point);

    I) solution cacaprout :
    tu implémentes l'evenement WM_RBUTTONUP dans la classe parent et tu mets la methode en public

    II) solution moins cacaprout

    1) Généralement, les methodes qui commence par On en MFC signifie qu'il sagit d'une methode declanché par un evenement. Dans ton cas, c'est l'evenement WM_RBUTTONUP

    2) tu veux générer un evenement dans la classe parent. Pour cela tu disposes principalement de 2 methodes
    SendMessage
    PostMessage

    la différence reside dans la synchronisation

    3) dans le msdn tu as à propos de WM_RBUTTONUP

    WM_RBUTTONUP
    The WM_RBUTTONUP message is posted when the user releases the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.

    WM_RBUTTONUP
    fwKeys = wParam; // key flags
    xPos = LOWORD(lParam); // horizontal position of cursor
    yPos = HIWORD(lParam); // vertical position of cursor

    Parameters
    fwKeys
    Value of wParam. Indicates whether various virtual keys are down. This parameter can be any combination of the following values: Value Description
    MK_CONTROL Set if the ctrl key is down.
    MK_LBUTTON Set if the left mouse button is down.
    MK_MBUTTON Set if the middle mouse button is down.
    MK_SHIFT Set if the shift key is down.


    xPos
    Value of the low-order word of lParam. Specifies the x-coordinate of the cursor. The coordinate is relative to the upper left corner of the client area.
    yPos
    Value of the high-order word of lParam. Specifies the y-coordinate of the cursor. The coordinate is relative to the upper left corner of the client area.
    Return Values
    If an application processes this message, it should return zero.

    Remarks
    An application can use the MAKEPOINTS macro to convert the lParam parameter to a POINTS structure.
    conclusion :

    tu dois envoyer un message correctement construit à la fenetre parent et non appeller la methode directement

  4. #4
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut Formatage des arguments
    Ok, j'ai compris il faut que j'utilise la methode PostMessage.

    Par contre j'ai un leger probleme pour reformatter les arguments a donner (nFlags et point)


    EDIT : J'ai trouve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void CTreeList::OnRButtonUp(UINT nFlags, CPoint point) 
    {
    	// TODO: Add your message handler code here and/or call default
    	CWnd * parent = this->GetParent();
      LPARAM lParam;
     
      lParam = (point.y & 0x0FFFF) << 16;
      lParam |= (point.x & 0x0FFFF);
     
      parent->PostMessage(WM_RBUTTONUP, nFlags, lParam);
    	CTreeCtrl::OnRButtonUp(nFlags, point);
    }
    Merci

  5. #5
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    je vois pas ou est le probleme, c'est ecrit noir sur blanc dans la partie du msdn que je t'ai copié


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

Discussions similaires

  1. [MFC] Appel Fonction OnEraseBkgnd
    Par bletz dans le forum MFC
    Réponses: 4
    Dernier message: 13/10/2005, 15h03
  2. Réponses: 7
    Dernier message: 10/10/2005, 15h31
  3. [MFC] Appeller "Save As"
    Par CaptnB dans le forum MFC
    Réponses: 1
    Dernier message: 29/07/2005, 09h19
  4. Réponses: 8
    Dernier message: 14/06/2004, 11h03
  5. [MFC] Appel d'une dialog
    Par mac07 dans le forum MFC
    Réponses: 6
    Dernier message: 23/12/2003, 18h52

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