Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DESSIN SUR ÉCRAN (TRÈS SIMPLE)


Information sur la source

Catégorie :Graphique Classé sous : dessin, écran, bureau, souris, trait Niveau : Débutant Date de création : 05/08/2006 Date de mise à jour : 06/08/2006 11:30:13 Vu / téléchargé: 22 753 / 732

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
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

  • /******************************************************************************
  • *
  • * 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;
  • }
/******************************************************************************
 *
 * 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 !
@+
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Dessin sur ecran.ex_Télécharger ce fichier [Réservé aux membres club]6 144 octets
  • main.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 748 octets

Télécharger le zip

Historique

06 août 2006 11:30:13 :
Gain de performances, ajout de la commande sleep et d'une fonction détectant les mouvements de la souris.

Commentaires et avis

signaler à un administrateur
Commentaire de ordiman85 le 05/08/2006 16:28:53

Testé sous Code::Blocks et Dev-C++. Lâchez vos commentaires...

signaler à un administrateur
Commentaire de vecchio56 le 05/08/2006 17:35:23 administrateur CS

Sans tester on voit bien que ton programme va monopoliser le CPU, tu pourrais au moins ajouter un petit Sleep pour le soulager
Pour récupérer un nouveau HDC a chaque tour de boucle?
Le mieux a mon avis serait de faire un hook pour intercepter le message WM_MOUSEMOVE
Code plus ou moins similaire: http://www.cppfrance.com/code.aspx?ID=29317
Bref, je trouve que ton code n'apporte rien de nouveau

signaler à un administrateur
Commentaire de Alcantornet le 06/10/2006 15:55:15

Je trouve ta source chouette car elle est très simple à comprendre. Moi j'aimerais dessiner uniquement sur le bureau à la place de l'arrière-plan  as-tu une idée comment faire ??

signaler à un administrateur
Commentaire de cocowebman le 28/10/2006 17:32:18

Super, pleins de commentaires et tout, merci :) .

signaler à un administrateur
Commentaire de kiki67100 le 04/04/2007 19:14:49

super source simple efficase  8/10

signaler à un administrateur
Commentaire de HierosGamos le 24/03/2008 18:30:13

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

signaler à un administrateur
Commentaire de HierosGamos le 24/03/2008 18:32:15

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

http://fr.youtube.com/watch?v=1gxE4_jLiMI

signaler à un administrateur
Commentaire de ordiman85 le 24/03/2008 22:37:13

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 !

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Coordonnées de la souris et résolution de l'écran [ par Thanatos ] Bonjour,Comment récupérer et afficher les coordonnées de la souris avec Borland c++ Builder ? Et commment récupérer la résolution de l'écran? Changement de fond d'écran sans redémarrage et sans bug après changement de résolution. [ par BouiB1 ] Je me suis moi aussi amusé a faire un ch'ti prog de chgt de fond d'écran. Voici un extrait de mon source cpp : SystemParametersInfo(SPI_SETDESKWALLPAP Ecran de veille qui anime le bureau [ par krimog ] Boujour &#224; tous. Je cherche &#224; faire un &#233;cran de veille en Allegro qui fait tomber des flocons sur l'&#233;cran actuel (avec le fond d'&# Evenements souris sur le bureau [ par Chayy ] Bonjour, je suis entrain de développer un utilitaire dans le cadre d'un projet d'étude, pour cela j'ai choisi d'utiliser Qt.Jusque la tout va bien sau Mode texte plein écran & Utilisation Souris [ par boudla ] Bonjour,Je suis débutant en ce qui concerne la programmation C, et ma question se décompose en 2 parties;1 : J'aimerais savoir comment faire pour lanc Capture d'ecran bureau en "background" [ par RougailSaucisse ] Bonjour à tous,Je suis actuellement en train de developper un programme (en c#, eh oui désolé pour ceux qui ne considère pas ca comme un "vrai" langua Dessin opaque sur une fenêtre 100% transparente [ par Albanderuaz ] Bonjour à tous!J'aimerais dessiner par exemple un rectangle sur une fenêtre transparente sans que celui-ci soit lui-même transparent. Un dessin opaque Un bug dû a l'affichage sur deux écran??? [ par tibob51 ] Bonjour j'ai un bug qui est un peu bizzare et inexplicable, je m'explique:J'ai créé un programme qui récupère des données sur internet et démarrant av programmer un curseur de souris [ par juju116 ] bonjour à tous tout d'abord!je suis vraiment un debutant pour tout dire je me borné juste à créer des thèmes xp a partir de logiciel genre stylebuilde Connaitre le nom de l'icône du bureau sur laquelle a cliqué l'utilisateur [ par ZMJUVENTINO ] Salut à toutes et à tous,Je cherche  comment peut-on connaitre le nom de l'icône du bureau sur laquelle a cliqué l'utilisateur comme dans les lecteurs


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.