Source en C, fonctionne tel quel en C++. Uitlise l'API Windows.
Mis à jour (1.0.1). Merci vecchio56 !
______________________________
Programme très simple qui dessine une trait noir et continu sur l'écran.
IMPORTANT !!! NOTEZ BIEN : Appuyez sur ECHAP pour terminer !
______________________________
L'utilisateur peut, lorsque le programme tourne, continuer son travail, et ce, sans empêcher les clics de souris !
N'oubliez pas d'ajouter -mwindows à l'éditeur de liens avant compilation.
Source / Exemple :
/******************************************************************************
*
- Dessin sur écran
- Version : 1.0.1.0
- Auteur : ordiman85
- Utilisation : libre et OpenSource
*
*
- Description : Dessine sur l'écran avec la souris
- Appuyez sur Echap pour terminer le programme
- Editeur de liens : -mwindows
*
// Fonctions de l'API Windows
#include <windows.h>
// Détecte si la souris a bougé, retourne 1 si vrai 0 si faux
char DetecteMouvement(POINT Position1) {
// Soulage le processeur (placé ici, Sleep sera appelé à chaque tour de boucle)
Sleep(2);
// Initialise une variable temporaire pour récupérer des nouvelles coordonnées
POINT Position2;
// Récupère les nouvelles coordonnées du curseur
GetCursorPos(&Position2);
// Teste la différence avec les coordonnées précédentes
if (Position1.x != Position2.x || Position1.y != Position2.y)
return 1; // Vrai
// Si la condition n'est pas réalisée, retourne faux
return 0;
}
// Procédure principale
int main()
{
// Contient les coordonnées x et y du curseur
POINT CurseurPosition;
// Variable qui détermine si l'utilisateur a appuyé sur Echap
char Quitter = 0;
// Récupère le Handle du bureau
HWND Bureau = GetDesktopWindow();
// Récupère la zone de dessin du bureau
HDC Dessin = GetWindowDC(Bureau);
// Prend les premières coordonnées de curseur
GetCursorPos(&CurseurPosition);
// Début de boucle
do {
// Détermine le point de départ courant
MoveToEx(Dessin, CurseurPosition.x, CurseurPosition.y, NULL);
// Stoppe le dessin jusqu'à ce que la souris bouge
while (!DetecteMouvement(CurseurPosition) && !Quitter)
// Détecte si la touche Echap est appuyée
if (GetAsyncKeyState(VK_ESCAPE))
Quitter = 1;
// Met à jour les coordonnées du curseur
GetCursorPos(&CurseurPosition);
// Relie par une ligne le point de départ et le point d'arrivée
LineTo(Dessin, CurseurPosition.x, CurseurPosition.y);
// Continue jusqu'à ce que Quitter soit différent de 0 (touche Echap appuyée)
} while (Quitter == 0);
// Libère le contexte de périphérique du bureau
ReleaseDC(Bureau, Dessin);
// Efface le dessin
InvalidateRect(0, 0, 0);
// Quitte le programme
return 0;
}
Conclusion :
Bug connu : Si on peut considérer ça comme un "bug", lorsqu'on dessine le trait sur un objet qui se redessine, un morceau du trait est automatiquement effacé. Exemple, lorsque vous agrandissez une fenêtre.
Code modifié pour ne plus monopoliser le CPU.
Bonne compilation !
@+
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.