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 :

Probl�me de Focus (SetFocus)


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par d�faut Probl�me de Focus (SetFocus)
    Bonjour,

    j'ai �crit une librairie comportant une fen�tre d'affichage graphique compl�tement "custom" (enfin, bas�e sur les CWnd).

    L'objet comprend plusieurs sous CWnd (il y a des "bandeaux" d'option � gauche et en haut, une "status bar" et un r�glage d'histogramme interactif � droite).

    Nom : Graphx01.png
Affichages : 289
Taille : 8,6 Ko

    Tout fonctionne tr�s bien. Mais il y a un bug dont je n'arrive pas � me d�patouiller. La fen�tre centrale (celle o� l'image est affich�e) permet de zoomer/dezoomer en utilisant la molette de la souris (j'avais d�j� post� une discussion ici qui n'est que partiellement r�solue). Pour rendre actif le zoom/dezoom, la seule mani�re que j'ai trouv�, c'est d'invoquer un "SetFocus" lorsque la souris se trouve sur la fen�tre, autrement, le WM_MOUSEWHEEL n'est pas g�n�r� dans cette fen�tre.

    Le probl�me est que lorsqu'une autre fen�tre flottante (de mon appli) se trouve au-dessus, il m'est impossible de retourner le focus � cette fen�tre qui est dessus. c'est tr�s probl�matique car dans mon appli j'ai une petite fen�tre qui, lorsqu'elle est compl�tement inscrite dans la zone graphique, n'est plus activable et c'est assez p�nible.

    Lorsqu'une autre fen�tre d'une appli ind�pendante est par-dessus, il n'y a pas se probl�me: la fen�tre par dessus prend le focus d�s que la souris passe dessus.

    Pour illustrer, voici deux images o� on voit la fl�che jaune qui correspond � la position de mon pointeur souris. Lorsqu'il est sous la fen�tre (avec un bandeau rouge), celle-ci ne r�cup�re pas le focus (comme j'ai expliqu�, cette fen�tre est une sous fen�tre de mon appli, mais pas une fen�tre enfant de mon display graphique).

    Nom : Graphx02.png
Affichages : 215
Taille : 34,8 KoNom : Graphx03.png
Affichages : 213
Taille : 34,9 Ko

    Voil�, merci d'avance pour tout commentaire/aide qui pourrait m'aider � r�gler ce bug.

    Gorgo Treize.

    PS: pour ceux qui se poseraient la question, les trac�s de ligne anti-alias�es dans la fen�tre sont g�n�r�s avec AGG (Anti Grain Geometry).

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Je n'ai pas trouv� grand-chose.
    Apparemment il faut que tu personnalises le WM_MOUSEWHEEL de chacune des fen�tres de ton application, pour manuellement demander quelle fen�tre / quel contr�le est sous le curseur, et lui propager le message (tout en r�glant un flag pour �viter de traiter le message r�cursivement).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par d�faut
    Bonsoir et merci pour la r�ponse. Donc en fait il faurdrait que j'arr�te d'appeler explicitement le "SetFocus", et que je g�re le WM_MOUSEWHEEL au niveau de mon CWnd duquel ma fen�tre d'affichage graphique d�pend... c'est bien �a?

    G13.

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    En effet, si tu rediriges les WM_MOUSEWHEEL correctement, tu n'as plus besoin de tenter de changer le focus toi-m�me.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par d�faut
    Merci, �a a en effet r�solu mon probl�me: dans le PreTranslateMessage du parent j'intercepte le message WM_MOUSEMOVE, je teste si le curseur est dans la fen�tre graphique (fille) et je mets le focus (SetFocus) sur cette fen�tre fille (� partir du parent) -- si je ne mets pas le focus, la molette de la souris n'est pas vue, mais j'imagine que je pourrais utiliser le m�me m�canisme (donc sans �tre oblig� de mettre explicitement le focus).... mais bon �a fonctionne bien comme �a, donc je laisse.

    De plus, lorsque le curseur passe sur une fen�tre qui est au-dessus (cf. mon premier message), alors le message OnMouseLeave est bien vu par la fen�tre fille ce qui n'�tait pas le cas avant (parce qu'avant je devais tout le temps appeler SetFocus dans OnMouseMove, ce qui ne permettait pas de passer le focus � une de mes fen�tres "on top").

    Voil�, m�me si le fonctionnement global de tout �a reste encore un brin flou pour moi (si je d�cortique plus pr�cis�ment je pense que je comprendrai comme il faut et que par la m�me occasion �a m'am�nera � pouvoir simplifier), j'estime que le probl�me est maintenant "R�solu"

    Domo arigato gozaimasu!

    Gorgo13

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me de focus avec une TTreeView
    Par Rustine dans le forum Composants VCL
    R�ponses: 2
    Dernier message: 24/10/2005, 18h12
  2. Probl�me de Focus
    Par Charette dans le forum Composants VCL
    R�ponses: 7
    Dernier message: 14/09/2005, 23h18
  3. probl�me de focus dans un CEdit
    Par Depteam1 dans le forum MFC
    R�ponses: 11
    Dernier message: 08/09/2005, 15h05
  4. [JTextField] Probl�me de focus
    Par clairette dans le forum Composants
    R�ponses: 29
    Dernier message: 22/07/2005, 16h52
  5. Probl�me de focus + touches de direction
    Par schnito dans le forum Agents de placement/Fen�tres
    R�ponses: 9
    Dernier message: 11/01/2005, 20h13

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