Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
953 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Mapping des coordonnées de la souris

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mapping des coordonnées de la souris

n°808840
m0rbac
Posté le 28-07-2004 à 16:28:17  profilanswer
 

Depuis quelques temps maintenant, j'essaie d'écrire un code qui me permette de modifier le comportement de la souris. Je m'explique:
En fait j'utilise une tablette graphique de type Volito (le modèle pas cher de Wacom). Le principe de la tablette, c'est qu'il fait un mapping de la surface de dessin de la tablette sur le bureau Windows. En clair, le point en haut à gauche de la tablette correspond au coin supérieur gauche du bureau, et le coin en bas à droite correspond au coin inférieur droit du bureau de Windows. Ca va très bien dans des conditions normales, mais ça commence à poser problème du moment que l'on utilise 2 moniteurs parce que dans ce cas le mapping fait que chaque écran partage une moitié de la surface de la tablette. Comme la tablette est une A6, ça fait qu'au final il ne reste plus grand chose de place pour dessiner :( Il y a aussi un autre problème de déformation qui entre en jeu.
 
En fait, c'est clair que ce serait aux drivers de la tablette de faire le mapping correctement. Mais le fabricant ne souhaite pas ajouter cette option pour ce modèle de tablette prétextant que ça engendrerait des coûts de développement, de tests, de validation, etc. et que ça augmenterait au final le prix de la tablette. D'ailleurs, les autres modèles plus chers du même fabricant supportent l'option, donc ils disent en gros que si on veut l'option, il faut acheter l'autre tablette (gentils les gars, mais ce n'était pas marqué sur le carton que c'était pas fait pour le dual monitor). Bon, donc comme apparemment c'est impossible de leur faire changer d'avis, il ne me reste plus qu'à faire le boulot moi-même.
 
Voilà pour la petite histoire. Retour à notre problème:
Donc maintenant l'idée c'est d'intercepter la position de la souris et de transformer les coordonnées pour mapper dans la région que l'on veut. J'ai essayé de différentes manières avec les GetCursorPos/SetCursorPos ainsi qu'avec DirectInput, mais je n'arrive jamais à avoir un truc correct. En fait, lorsque j'utilise DirectInput, je me retrouve avec 2 curseurs clignotants à l'écran, ce qui est normal parce que windows reçoit les coordonnées directement de la souris + celles que je transforme après. Donc voilà ma question (ouf, enfin !): est-ce qu'il y a moyen d'empêcher windows de recevoir/mettre à jour la position de la souris ? Question subsidiaire: est-ce que quelqu'un a déjà été confronté à ce problème et a une solution ?
 
Merci à ceux qui auront eu le courage de me lire jusqu'au bout, ainsi qu'à ceux qui ont une idée de solution  :)

mood
Publicité
Posté le 28-07-2004 à 16:28:17  profilanswer
 

n°808854
oliv5
Pourquoi ? Parce que !
Posté le 28-07-2004 à 16:32:41  profilanswer
 

Bah, heu, je dirais tout modestement ( :D ) que je tombe bien :)
 
Je fais en ce moment un ptit soft qui capture .... le clavier. Toi, tu veux capturer la souris .... c'est quasiment pareil (dans windows du moins).
 
Windows te permet d'installer des "hooks" bas niveau (fonctions callback) qu'il va appeler lorsque se produisent certains evenemments (souris, clavier et autres...).
 
Regarde les fonctions win32 "SetLowLeveMouseHook", ou qqchose dans le genre.
Tu dois pouvoir ecrire un prog qui sera informé de tous les evenements souris.

n°808859
m0rbac
Posté le 28-07-2004 à 16:38:35  profilanswer
 

oliv5 a écrit :

Bah, heu, je dirais tout modestement ( :D ) que je tombe bien :)
 
Je fais en ce moment un ptit soft qui capture .... le clavier. Toi, tu veux capturer la souris .... c'est quasiment pareil (dans windows du moins).
 
Windows te permet d'installer des "hooks" bas niveau (fonctions callback) qu'il va appeler lorsque se produisent certains evenemments (souris, clavier et autres...).
 
Regarde les fonctions win32 "SetLowLeveMouseHook", ou qqchose dans le genre.
Tu dois pouvoir ecrire un prog qui sera informé de tous les evenements souris.


Merci d'être tombé  :D  
Bon en fait je n'ai pas de problème pour recevoir les infos de la souris puisque je peux le faire avec un GetCursorPos() ou avec un GetDeviceState() de DirectInput. Le problème c'est que quand je mets à jour la position du curseur, en fait il semblerait que Windows ait déjà également mis à jour cette position. Du coup la position la souris switch entre les 2 positions (la position normale et la position modifiée).
Je vais quand même voir en détail ces fonctions bas niveau. Merci bcp :)

n°808888
oliv5
Pourquoi ? Parce que !
Posté le 28-07-2004 à 17:01:14  profilanswer
 

LOl, j'ai parlé un peu vite...
La prochaine fois, je ferais mieux de la fermer ...  :jap:  
 
Je sais qu'il y a une fonction pour empécher tous les evenements souris/clavier d'arriver aux applications (MSDN, rubrique keyboard functions par ex) ... mais ca n'empechera certainement pas windows de déplacer le curseur à l'écran ...
 
Aprés t'avoir donné une lueur d'espoir, je vais te détruire le moral  :D  
Je pense que ca va etre trés compliqué, voire impossible : quand windows freeze (ca arrive), la dernière chose qui se bloque, c'est bien la souris ... Ce qui veut dire que c'est géré trés trés bas ...
 
Mais bon, on sait jamais, ya ptetre une fonction pour ca ...

n°808974
HelloWorld
Salut tout le monde!
Posté le 28-07-2004 à 18:14:10  profilanswer
 

Moi je vois pas comment y arriver sans passer par un driver... Ou alors en modifiant le soft de ta tablette lui même (déssasembler / patcher le driver [:huit])


Message édité par HelloWorld le 28-07-2004 à 18:14:45

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°809041
m0rbac
Posté le 28-07-2004 à 19:08:31  profilanswer
 

Bon, en fouillant un peu dans des forums (héhé, à ce propos, je remarque que c'est un peu la guère entre Wacom et les utilisateurs du mode dual monitor [voir ici: http://www.wacom-europe.com/forum/ [...] PIC_ID=665  :D ) j'ai trouvé un utilitaire en VisualBasic (pour ceux que ça intéresse: http://sourceforge.net/projects/vbtablet/) qui capte les coordonnées de la tablette. Je vais touiller un peu dans le source pour voir ce que ça donne. Je garde bon espoir.
A vrai dire, je préfère tout tenter avant de me lancer dans la réécriture du driver (ce que je n'ai d'ailleurs jamais fait) car je sais que les drivers pour Windows, c'est la folie !

n°809974
HelloWorld
Salut tout le monde!
Posté le 29-07-2004 à 14:27:25  profilanswer
 

m0rbac a écrit :

j'ai trouvé un utilitaire en VisualBasic (pour ceux que ça intéresse: http://sourceforge.net/projects/vbtablet/) qui capte les coordonnées de la tablette.


Je suis pas sûr que ce soit ce que tu cherches :

Citation :

I'm a programmer, so naturally I tried to do something with it, only to find that there was very little support for VB, and only via the standard (C/C++ based) API. So I made my own. VBTablet encapsulates the WinTab API in an easy-to-use ActiveX component DLL



---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°810443
m0rbac
Posté le 29-07-2004 à 20:31:10  profilanswer
 

Oui, je devrais sûrement chercher du côté de l'API WinTab. Mais dans l'immédiat, le langage utilisé m'importe peu. Peut-être que par la suite j'essaierai de faire quelque chose de plus propre. Je veux déjà voir si j'arrive à faire le truc que je veux, qui marche comme je l'entends, pas besoin que ça soit hyper boosté.
 
Donc pour le moment j'ai torché un truc vite fait en VB qui me fait le mapping des coordonnées. Ca marche bien, mais il reste à fixer un dernière problème (qui était d'ailleurs prévu): maintenant j'aimerais pouvoir "cliquer" sur la tablette, j'entends par là, faire une pression avec le stylet. Or comme je clique forcément en dehors de l'application VB, je perds le focus sur l'application et le mapping s'arrête :( Donc il faut que j'arrive à faire tourner l'appli en background de manière permanente.
Il faut dire que dans ce domaine je sèche un peu. Je suis toujours en train de chercher dans la doc et les tuts, mais si qqun sait comment faire, je suis preneur.
 
Merci encore pour l'aide  :bounce:  
 
ps: il semble que le topic s'oriente de plus en plus vers VisualBasic... mmmh dans une section C/C++, ça fait désordre  :whistle:

n°811037
HelloWorld
Salut tout le monde!
Posté le 30-07-2004 à 12:31:30  profilanswer
 

Citation :

Or comme je clique forcément en dehors de l'application VB, je perds le focus sur l'application et le mapping s'arrête


Il faut capturer la souris (SetCapture).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Mapping des coordonnées de la souris

 

Sujets relatifs
[Résolu] Mouvement de la souris au-dessus d'un contrôle CStaticaffichage d'une fenetre au survol de la souris
Help ! je voudrais faire un programme qui bouge la souris et cliqueCoordonnées d'un clic
Récupérer coordonnées souris et les utiliser...Quelle fonction utiliser pour récupérer les coordonnées de la souris?
[JS/HTML] récuperer les coordonnées d'un clic sur une imageclic de la souris programmé
Plus de sujets relatifs à : Mapping des coordonnées de la souris


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR