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 :

Empecher le curseur de sortir du dialog [FAQ]


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Empecher le curseur de sortir du dialog
    Salut,

    J'ai une dialogue qui est ouverte et je voudrais empecher le pointeur de sortir de la fenêtre et d'aller sur d'autre fenêtre (ou peut-être simplement désactiver une action sur une autre fenêtre qui ne serait pas au premier plan).

    J'ai déjà fais une fonction qui me ramène le curseur à l'intérieur de la fenêtre, il marche mais pas l'extérieur de ma dialog (il ne se passe rien, je perd même le focus)
    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
     
    RECT rectposition;
    POINT pt;
     
    void StopCurseur (HWND hwnd)
    {
    	GetWindowRect(hwnd, &rectposition);
    	GetCursorPos(&pt);
    	if (pt.x > rectposition.right)
    		pt.x = rectposition.right;
    	if (pt.x < rectposition.left)
    		pt.x = rectposition.left;
    	if (pt.y > rectposition.bottom)
    		pt.y = rectposition.bottom;
    	if (pt.y < rectposition.top)
    		pt.y = rectposition.top;
    	SetCursorPos(pt.x,pt.y);
    	return ;
    }
    Visiblement, il ne faut pas la mettre dans la DLGPROC. Je suis encore un newbiz mais j'ai cru comprendre que lorque l'évènement dans la zone non-client WM_NCACTIVATE (ou autre WM_NC...) arrivait l'action était envoyé à la fonction gérant les évènements de la fenêtre, et là rien non plus. Ah bah merde alors...

    Quelqu'un saurait-il comment qu'on fait cela ?

    SeB

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Je me sens seul sur ce coup là, personne ne veut répondre ?

    En tout cas, je progresse dans mon problème mais c'est pas encore au point : dans le gestionnaire d'évènement de ma boite de dialogue, j'ai mis ça :
    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
    //Si le curseur se déplace mais reste dans la boite de dialogue Login
    case WM_MOUSEMOVE:
    	MAKEPOINTS (lParam) ;
    	pt.x= LOWORD (lParam);
    	pt.y= HIWORD (lParam);
    	GetWindowRect(hwnd, &rectposition);
    	GetClientRect(hwnd, &rectdimensions);
    	if (pt.x < rectdimensions.left)
    		pt.x = rectposition.left;
    	if (pt.x > rectdimensions.right)
    		pt.x = rectposition.right;
    	if (pt.y > rectdimensions.bottom)
    		pt.y = rectposition.bottom;
    	if (pt.x < rectdimensions.top)
    		pt.y = rectposition.top;
    	SetCursorPos(pt.x,pt.y);
    	break;
    Mais c'est l'inverse qui se produit mon pointeur ne peut plus rentrer dans la fenêtre... En plus il semble que les valeurs contenues dans rectposition soient les dimensions de ma fenêtre et non celle de sa position !

    SeB

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2002
    Messages : 35
    Points : 44
    Points
    44
    Par défaut
    Voila ta soluce =)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void StopCurseur (HWND hwnd) 
    { 
       RECT rc;
       GetWindowRect(hwnd, &rc);
       ClipCursor(&rc);
    }

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2002
    Messages : 35
    Points : 44
    Points
    44
    Par défaut
    Pour annuler le clip =)


  5. #5
    Membre régulier
    Profil pro
    Ingénieur R&D
    Inscrit en
    Juillet 2002
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 81
    Points : 74
    Points
    74
    Par défaut
    La simplicité est la sophistication suprême.
    Et tu viens juste de le prouver.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci, c'est vraiment sympa. C'est vrai que c'est beaucoup plus simple et en plus ça marche.

    SeB

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/07/2007, 16h23
  2. Réponses: 6
    Dernier message: 07/11/2006, 10h23
  3. Empecher les utilisateurs de sortir de leur repertoire home sous debian
    Par Faith's Fall dans le forum Administration système
    Réponses: 7
    Dernier message: 24/04/2006, 20h05
  4. Empêcher un curseur de sortir d'une JWindow
    Par Bighobbit dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 24/03/2006, 18h10
  5. Empecher une form de sortir du cadre...
    Par macdaemon dans le forum C++Builder
    Réponses: 2
    Dernier message: 16/08/2004, 14h17

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