Dessin sur écran (très simple)

Soyez le premier à donner votre avis sur cette source.

Vue 43 148 fois - Téléchargée 1 082 fois

Description

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 !
@+

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
dimanche 27 septembre 2009
Statut
Membre
Dernière intervention
2 octobre 2009

Super, il marche très bien
Messages postés
41
Date d'inscription
samedi 4 mars 2006
Statut
Membre
Dernière intervention
19 mars 2010

Pour figer l'écran et empêcher l'effacement, tu peux utiliser SetCapture.
Sinon pour tirer un trait, ou dessiner des formes regarde de ce coté :
http://msdn2.microsoft.com/en-us/library/ms534906(VS.85).aspx

Pour faire une capture d'écran ça doit tenir dans quelques lgnes de code. Cherche les sources qui créent des "bureaux virtuels" sur cppfrance, elles devraient t'aider.

à plus tard !
Messages postés
2
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
24 mars 2008

Voici un exemple de ce que j'ai pu faire (en test rapide) de ton prog...

http://fr.youtube.com/watch?v=1gxE4_jLiMI
Messages postés
2
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
24 mars 2008

Bonjour, je travaille dans la vidéo, et ton programme m'a super intéressé. En effet, je travaille sur le procédé de "mapping vidéo", qui consiste à projeter des images sur des endroits précis d'un lieu (fenêtre, rebords de trottoir, toit...).

Or ton programme me permet de dessiner sur le bureau (arrière-plan noir) de mon second écran(qui est relié au vidéo projecteur), afin d'avoir les contours précis de la maison. Je n'ai ensuite plus qu'à récupérer une capture de mon second écran, et à utiliser cette "carte" dans mon logiciel de montage pour préparer mon "mix" audio-visuel.

Cependant, il me manque deux trucs vraiment importants :
- Une gomme ! LOL.
- Et la possibilité de tirer des traits droits. ;-)

Et un truc moins important :
- faire une capture d'une partie de l'écran (Windows enregistre les deux écrans en même temps, mais bon comme j'ai dis, j'ai un autre prog qui le fait).

Tu crois que c'est jouable ?

^_^

VJ.Hieros.Gamos@Free.Fr
Messages postés
313
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
10 août 2013
1
super source simple efficase 8/10
Afficher les 9 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.