begin process at 2010 02 10 02:24:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > DESSIN SUR ÉCRAN (TRÈS SIMPLE)

DESSIN SUR ÉCRAN (TRÈS SIMPLE)


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :27 046 / 775

Auteur : ordiman85

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (9)
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

Les Membres Club peuvent 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.

 Sources du même auteur

Source avec Zip Source avec une capture [WIN32] EASY WAVE MIXER
Source avec Zip Source avec une capture [C++] HASH FINDER - CALCULATEUR DE HASH
Source avec Zip Source avec une capture CONTROLEUR DE VOLUME SONORE EN C [ API WINDOWS ]
Source avec Zip Source avec une capture [C++] BASE64CONVERTER V1.1, UN ENCODEUR DÉCODEUR EN BASE64
Source avec Zip Source avec une capture [C] NET SEND MACHINE V1.1.1 (ENVOI EN RAFALE OU ANONYME, PRO...

 Sources de la même categorie

Source avec Zip Source avec une capture VIEWER COMPLET POUR LE TRAITEMENT DE L'IMAGE : IMANALYSE par Pistol_Pete
Source avec Zip DECOUPAGE DE SPRITES par Jackyzgood
Source avec Zip Source avec une capture SIMULATION DE LA DIFFUSION THERMIQUE par ncoder
Source avec Zip Source avec une capture Source .NET (Dotnet) TRANSFORMÉ DE FOURIER RAPIDE EN TRAITEMENT D'IMAGE par reyken
Source avec Zip Source avec une capture 2D GAME DIRECT X 9 par nanonavich

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture QUICKWAYTOFOLDERS par yex
Source avec Zip Source avec une capture EXTENSION DU SHELL : MENU CONTEXTUEL (WIN32 API) par racpp
Source avec Zip Source avec une capture RÉARRANGER LES LIGNES D'UNE LISTVIEW À LA SOURIS (WIN32 API) par racpp
Source avec Zip CACHER LES CURSEURS SYSTÈME (WIN32 API) par racpp
Source avec Zip Source avec une capture ZOOMIT, UNE LOUPE SUIT VOTRE SOURIS... par ndubien

Commentaires et avis

Commentaire de ordiman85 le 05/08/2006 16:28:53

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

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

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 ??

Commentaire de cocowebman le 28/10/2006 17:32:18

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

Commentaire de kiki67100 le 04/04/2007 19:14:49

super source simple efficase  8/10

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

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

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 !

Commentaire de giladvance le 02/10/2009 21:27:33

Super, il marche très bien

 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

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales