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 :

Visual C++ 6 MFC Desactivation/Réactivation souris


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 94
    Par défaut Visual C++ 6 MFC Desactivation/Réactivation souris
    Bonjour,
    Je voudrais pouvoir désactiver la souris au début d'une boucle qui dessine dans OnDraw(..) et la réactiver à la fin de cette boucle.

    J'ai constaté que lorsque je cliquais sur le bouton gauche ou droit de la souris pendant l'exécution de cette boucle le sablier se mettait en place et le dessin ne progressait plus à l'écran ,sans qu'il y ait un plantage car à la fin de l' exécution de la boucle tout redevient normal .

    Je voudrais donc empêcher la souris d'envoyer des événements...
    J'ai essayé en mettant en place un HOOK sur les messages WM_LBUTTONDOWN et WM_RBUTTONDOWN mais je ne sais pas ce qu'il faut faire quand on les a piégés pour qu'ensuite ils ne soient plus actifs.

    Je me suis servi de la fonction msghook d'un exemple que j'ai modifiée ainsi sans résultat:
    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
    static LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam)
        {
         if(nCode < 0)
    	{ /* pass it on */
    	 CallNextHookEx(hook, nCode, wParam, lParam);
    	 return 0;
    	} /* pass it on */
         LPMSG msg = (LPMSG)lParam;
     
    //////////////////////////MODIF///////////////////
         if (msg->message == WM_MOUSEMOVE || msg->message == WM_NCMOUSEMOVE 
    		 ||  msg->message == WM_LBUTTONDOWN ||  msg->message == WM_RBUTTONDOWN)
    	 {}
    	 //PostMessage(hWndServer, UWM_MOUSEMOVE, 0, 0);
    ////////////////////FIN MODIF/////////////////////////////////////
         return CallNextHookEx(hook, nCode, wParam, lParam);
        } // msghook
    Quelqu'un pourrait-il m'aider ?

    A l'avance , merci.

    PS - que signifie exactement la présence du sablier dans mon cas ?

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 94
    Par défaut
    Bonsoir,
    Une question supplémentaire :
    - est-il possible sous windows de faire un hook directement sur l' INT33 du bios pour désactiver et réactiver la souris ?

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 94
    Par défaut
    Re,
    J'ai trouvé quelque chose qui me convient parfaitement : BockInput(BOOL) qui bloque/débloque les entrées clavier/souris.

  4. #4
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    salut,

    je comprends pas trop ton probleme ...
    ton curseur devient un sablier lors d'un clic (et dans la barre de titre, il y a "(ne répond pas)" ?) c'est parce que tu ne laisses pas respirer ton application. (la fameuse boucle à message)

    c'est un probleme de conception de ton appli ...

    lance un thread (WorkerThread) qui dessine dans un bitmap, puis quand le boulot est fini, tu affiches ton bitmap dans la fenetre (dans OnDraw)

    Regardes dans la FAQ, il y a tout ce qu'il te faut ...

    @+

  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
    salut,
    Si ta boucle est trop longue elle ne laisse pas respirer ton application.
    intègre un appel à la pompe à messages au milieu de celle-ci.
    http://cpp.developpez.com/faq/vc/?pa...rk#PumpMessage

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 94
    Par défaut
    Merci à Stephdim et Farscape
    Stephdim
    J'avais seulement le sablier mais pas "l'application ne répond pas". En fait l'application continuait à travailler mais ne redessinait pas suite au clic sur le bouton. A la fin de la boucle tout se débloquait mais le dessin n'était pas affiché depuis le clic.
    Ta fonction qui dessine dans un bitmap qu'on peut afficher ensuite est très intéressante, je ne la connaissais pas mais je n'aurais pas pu l'appliquer car dans mon cas il faut que le tracé du dessin ailles à la vitesse de travail d'une machine outil pilotée par le programme et la boucle dans On Draw sert à la fois à envoyer les commandes à la machine et à dessiner...
    Il y a certainement une meilleure architecture à appliquer mais c'est ce que j'avais trouvé de plus logique...
    Farscape
    Je n'avais pas su repérer la pompe à message dans la faq. Ca parait interessant . J'essayerai de voir ce que cà donne dans mon cas.

    Mais pour le moment BockInput(BOOL) que j'ai découvert me convient parfaitement.
    Il est facile à utiliser et permet quand même d'arrêter le programme par CTRL ALT DEL . A mon avis tu devrais l'ajouter dans la faq car il pourrait en dépanner plus d'un ...

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

Discussions similaires

  1. Desactiver molette souris avec propriété MouseWheel
    Par anirba dans le forum VBA Access
    Réponses: 6
    Dernier message: 15/02/2008, 22h35
  2. Réponses: 4
    Dernier message: 18/03/2006, 20h34
  3. visual c++ sans mfc ...
    Par fox1976 dans le forum MFC
    Réponses: 1
    Dernier message: 08/01/2006, 06h04
  4. Visual .NET et MFC 71
    Par romeo9423 dans le forum MFC
    Réponses: 5
    Dernier message: 13/06/2005, 11h02

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