Faire glisser la souris

Soyez le premier à donner votre avis sur cette source.

Vue 8 853 fois - Téléchargée 564 fois

Description

Bonjour.

Cette Source pourrait faire partie d'une Blague :
Une fois le Programme Lancé, votre Souris Glissera
au Moindre de vos Déplacements.
Pire, Arrivé au Bord de l'Ecran, la Souris Reapparaît
à l'autre Bout, et Continue de Glisser.

La Source vous donne l'Occasion de voir les Fonctions Windows
permettant de Manipuler la Souris.

Source / Exemple :


/*******************************************************************

      • Petit Programme "Chiant" Faisant "Glisser" le Mulot ***
      • Comme s'il Etait dans l'Espace...(Sans Frottement) ***
      • De plus en Sortant de l'Ecran la Souris apparait ***
      • à l'Autre Bout ***
      • /!\ /!\ ***
      • Il Faudra Fermer le Programme pour Arrêter le Cauchemard ***
                                                                                                                                        • /
// ********************************************************************************************* // Déclaration des Entêtes ********************************************************************* // ********************************************************************************************* #include <windows.h> #include <iostream.h> #include <stdio.h> // ********************************************************************************************* // Déclaration des Fonctions ******************************************************************* // ********************************************************************************************* Deplacement(POINT &PointAncien , POINT &PointRecent); // ********************************************************************************************* // Programme Principal ************************************************************************* // ********************************************************************************************* int main() { //******************************** Création des Variable Locale ******************************** // Stockage des Coordonnées à l'Instant t1,t2,t3 POINT P1,P2; // ******************************* Fin de Création des Variables Locale ************************ // Obtient la Position du Curseur à l'instant t1 GetCursorPos(&P1); // On Rends "Explicitement" la main à Windows Sleep(8); //*************************************** Boucle Infini **************************************** do { // Stockage des Coordonées de P2(t2) GetCursorPos(&P2); // Fait Glisser la Souris (Selon de Déplacement Observé entre t1 et t2) Deplacement(P1 , P2); // On Rends "Explicitement" la main à Windows Sleep(8); // Stockage des Coordonées de P1(t1) GetCursorPos(&P1); // Fait Glisser la Souris (Selon de Déplacement Observé entre t2 et t3) Deplacement(P2 , P1); Sleep(8); }while(1); //************************************** Fin Boucle Infini ************************************* return 0; } // fin de main // ************************************************** // * * // * Fonction Gérant les Déplacements de la Souris * // * --------------------------------------------- * // * * // * * // * Des Ajustements sont Effectuer pour Permettre * // * à la Souris d'Apparaître de l'Autre côté de * // * l'Ecran Lorsque l'on Dépasse du Cadre * // * * // ************************************************** Deplacement(POINT &P1 , POINT &P2) { // Stockage des Coordonnées à l'Instant t1,t2,t3 long x1=0,y1=0 ,x2=0,y2=0,x3,y3; // Stockage des Coordonnées MAX de l'Ecran POINT Ecran = {GetSystemMetrics(SM_CXSCREEN)-1, GetSystemMetrics(SM_CYSCREEN)-1}; // Stockage du Vecteur de Déplacement POINT Delta; // Calcul du Vecteur de Déplacement Delta.x = (P2.x-P1.x); Delta.y = (P2.y-P1.y); // Récupération des Données x1=P1.x; y1=P1.y; x2=P2.x; y2=P2.y; // Prévoit le Prochain Déplacement // (Sans l'Effectuer car il y aura peut être des Ajustements à faire) x3=x2+Delta.x; y3=y2+Delta.y; // Tester le Dépassement Droite-Gauche (Axe x) if ( (x3>=(Ecran.x)) || (x3<=0) ) { // Changer les Prévisions en Cas de Dépassement en Positif (Vers la Gauche) if ( x3>=(Ecran.x) ) { x3=(0+Delta.x) - (Ecran.x-x2); x2=0 - (Ecran.x-x2); } // Changer les Prévisions en Cas de Dépassement en Négatif (Vers la Droite) if ( x3<=0 ) { x3=Ecran.x+Delta.x+x2; x2=Ecran.x+x2; } } // Fin du Test (Axe x) // Tester le Dépassement Haut-Bas (Axe y) if( (y3>=Ecran.y) || (y3<=0) ) { // Changer les Prévisions en Cas de Dépassement en Positif (Vers le Haut) if ( y3>=Ecran.y ) { y3=(0+(Delta.y)) - (Ecran.y-y2); y2=0 - (Ecran.y-y2); } // Changer les Prévisions en Cas de Dépassement en Négatif (Vers le Bas) if ( y3<=0 ) { y3=Ecran.y+(Delta.y)+y2; y2=Ecran.y+y2; } } // Fin du Test (Axe y) // On Réenregistre P2 car il servira pour le Prochain Déplacement P2.x=x2; P2.y=y2; // Effectue le Déplacement (Si Besoin, des Ajustements ont été faits depuis les Prévisions) SetCursorPos(x3,y3); Sleep (8); } // Fin de Deplacement

Conclusion :


!!! ATTENTION !!!
!!! A LIRE AVANT DE LANCER LE PROGRAMME !!!

Pour Stopper le Mouvement de la Souris, il faudra Fermé le programme.
Cela ce fait en Fermant la Fenêtre DOS : "Souris_Glisse.exe" .

Comme la Souris sera (Pour les Moins Doués) Incontrôlable, vous pouvez

utiliser ALT+ENTREE pour Fermer le Programme.

Si vous avez perdu le Focus sur l'Application (En cliquant n'import où !!)
Il faudra dabord faire ALT+TAB pour retourner sur "Souris_Glisse.exe" .

PS:
Essayer de Faire un Dessin sur Paint ;-)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
239
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
20 avril 2009

Si ca n'a pas change, le type "int" est suppose etre un entier da la taille native de la plateforme.
Cela a des quelquefois eu des consequences rigolotes. Par exemple sur les premieres versions d'OSF/1 sur DEC ALPHA, les long etaient toujours en 32 bits mais les int etaient en 64...
L'arrivee des "long long" a un peu calme les choses, mais j'avoue que je prefere les "pseudo types" genre __int16 ou __int64. Au moins, on sait vraiment ce qu'on va avoir et on n'a pas de surprises (sauf que la plupart des plateformes ne les reconnaissent pas... Quite a normaliser quelque chose, pourquoi ne pas choisir ce genre de notations ?).
A l'epoque (au millenaire dernier :op) je faisais du portage de SUN vers DEC, et j'en ai [...] des vertes et des pas mures avec ces histoires de tailles :o)
Messages postés
7
Date d'inscription
jeudi 14 février 2008
Statut
Membre
Dernière intervention
28 avril 2008

salut
bon travail amigo continue
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
L'accès à une adresse alignée en est assurément une, c'était le but de la remarque.
Messages postés
141
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
20 avril 2011

Pour conclure : (je ne veux pas non plus que la source devienne un lieu de débat)
On est donc d'accord que c'est une habitude de codage ;)
Mais je ne pense pas qu'on puisse parler d'optimisation à ce stade ;)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
'long' était passé de 2 à 4 quand on est passé du 16 au 32 et on a été nombreux à trouver que c'était le souk pour l'existant. La décision avait alors été prise que tous les types primaires ne bougeraient plus.
En prog Win on a les types Win évolutifs à employer, du genre INT_PTR. C'est une habitude à avoir, rien de plus.
Afficher les 22 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.