IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

API WIN 32 - Curseur en croix


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Points : 31
    Points
    31
    Par défaut API WIN 32 - Curseur en croix
    Bonjour à tous,

    Dans mon application, j'ai besoin d'afficher une croix à la position du curseur.
    Cette croix doit être de la taille de la fenêtre.

    Avec le code ci-dessous, la croix s'affiche seulement lorsque j'appuye sur le bouton de la souris.

    Je souhaite que la croix s'affiche et se réactualise lorsque le curseur change de position.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    case WM_MOUSEMOVE:
      hdc = GetDC(hWnd);
      xp = LOWORD(lParam);
      yp = HIWORD(lParam);
      MoveToEx(hdc,0,yp,NULL);
      LineTo(hdc, largeFen, yp);
      MoveToEx(hdc,xp,0,NULL);
      LineTo(hdc, xp, longFen);
      break;
    Merci pour vos réponse.

  2. #2
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 886
    Points : 1 526
    Points
    1 526
    Par défaut
    Il manquerait pas un ReleaseDC à la fin de la fonction ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Points : 31
    Points
    31
    Par défaut
    Merci ça marche déjà beaucoup mieux avec ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    case WM_MOUSEMOVE:
      hdc = GetDC(hWnd);
      xp = LOWORD(lParam);
      yp = HIWORD(lParam);
      MoveToEx(hdc,0,yp,NULL);
      LineTo(hdc, largFen, yp);
      MoveToEx(hdc,xp,0,NULL);
      LineTo(hdc, xp, longFen);
      ReleaseDC(hWnd,hdc);
      break;
    Y-a-t-il une façon de n'afficher qu'une seule croix, celle à l'endroit où le curseur est positionné ?

    Je m'explique : en utilisant cette méthode, j'affiche une croix à chaque déplacement mais je n'efface pas les anciennes.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Le plus simple est de sauvegarder les coordonnées du dernier affichage et d'utilisé un XOR.
    Avant d'afficher la croix aux nouvelles cordonnées, vous l'afficher de nouveau aux anciennes coordonnées. Un affichage double en XOR annule les modifications.

    Mais pourquoi faire cette tambouille au lieu d'associer un curseur à votre fenêtre ?

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Normalement, ce n'est pas comme ça qu'on affiche: Pour être pleinement respectueux des conventions sous Windows, tu dois faire seulement un InvalidateRect() lors du MouseMove (et sans doute aussi, mémoriser la position du curseur), puis faire le véritable dessin dans le traitement du message WM_PAINT.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [API WIN] SAuvegarder l'image du pointeur
    Par eyghon dans le forum Windows
    Réponses: 10
    Dernier message: 19/04/2006, 13h10
  2. [API Win]Fonction pour connaître l'uptime?
    Par oiffrig dans le forum Windows
    Réponses: 2
    Dernier message: 24/10/2005, 09h52
  3. [API WIN] Eviter qu'un prog se lance 2 fois...
    Par asher256 dans le forum Windows
    Réponses: 2
    Dernier message: 07/10/2005, 15h58
  4. La programmation API win en C
    Par AjJi dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 29/09/2005, 22h22
  5. [API WIN 32]effacer un fichier
    Par ben_iap dans le forum MFC
    Réponses: 2
    Dernier message: 30/01/2004, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo