Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1540 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Résolu] Mouvement de la souris au-dessus d'un contrôle CStatic

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Mouvement de la souris au-dessus d'un contrôle CStatic

n°796721
choupinou
Posté le 15-07-2004 à 16:55:20  profilanswer
 

Bonjour, j'aimerais récupérer un message pour savoir si la souris est au-dessus d'un contrôle de type CStatic.  
J'ai regardé dans l'aide et j'ai trouvé le message WM_MOUSEHOVER. Je ne sais pas si celui-ci est le bon et je ne sais pas comment l'intercepter.


Message édité par choupinou le 20-07-2004 à 13:06:04
mood
Publicité
Posté le 15-07-2004 à 16:55:20  profilanswer
 

n°797851
FrozenPala​din
Posté le 16-07-2004 à 15:56:16  profilanswer
 

Ce qu'il est possible de faire dans un prog MFC c'est de rajouter avec ClassWizard l'évènement WM_MOUSEMOVE à la fenetre. La fonction OnMouseMove est alors ajoutée au code de la fenetre (elle est appelée automatiquement). Un des parametre permet de vérifier le statut des boutons de la souris. Mais le second indique la position de la souris dans la fenetre sous la forme CPoint. Cela suppose quand meme de connaitre la position de ton controle.

n°797859
FrozenPala​din
Posté le 16-07-2004 à 15:58:44  profilanswer
 

Tout les infos sont sur le site microsoft MSDN

n°797901
mynab
Posté le 16-07-2004 à 16:50:55  profilanswer
 

Tu ajoutes un handler sur WM_MOUSEMOVE. Quand tu es appele tu fais un GetCapture. Ceci t'assurera de recevoir des WM_MOUSEMOVE meme quand la souris sortira de ton controle. Du coup a chaque WM_MOUSEMOVE il faut que tu verifies que le curseur est bien dans ton controle: pour ca tu utilises le CPoint que Windows te passe. Ce CPoint est en coordonnes client de ton controle donc il faut que pt.x et pt.y soient positifs et que pt.x soit inferieur a la largeur de ton controle et pt.y a la hauteur. Si le curseur est en dehors du controle alors tu fais un ReleaseCapture pour ne plus recevoir de notifications WM_MOUSEMOVE inutiles.
 

n°797940
choupinou
Posté le 16-07-2004 à 17:26:49  profilanswer
 

Merci pour l'aide mais c'est bon j'ai trouvé une solution grâce aux exemples qu'ion peut trouver sur www.codeproject.com
 
Si vous voulez savoir comment changer le curseur lorsqu'il passe au-dessus d'un contrôle CStatic puis ouvrir une page internet en cliquant sur ce contrôle, voilà le code :
 
HyperLink.h

Code :
  1. #pragma once
  2. // CHyperLink
  3. class CHyperLink : public CStatic
  4. {
  5. DECLARE_DYNAMIC(CHyperLink)
  6. public:
  7. CHyperLink();
  8. virtual ~CHyperLink();
  9. protected:
  10. DECLARE_MESSAGE_MAP()
  11. public:
  12. CString m_Lien;
  13. public:
  14. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  15.     afx_msg void OnClicked();
  16. };


 
HyperLink.cpp

Code :
  1. // HyperLink.cpp : fichier d'implémentation
  2. //
  3. #include "stdafx.h"
  4. #include "F.E.A.T.h"
  5. #include "HyperLink.h"
  6. #include ".\hyperlink.h"
  7. // CHyperLink
  8. IMPLEMENT_DYNAMIC(CHyperLink, CStatic)
  9. CHyperLink::CHyperLink()
  10. {
  11. }
  12. CHyperLink::~CHyperLink()
  13. {
  14. }
  15. BEGIN_MESSAGE_MAP(CHyperLink, CStatic)
  16. ON_WM_MOUSEMOVE()
  17.     ON_CONTROL_REFLECT(STN_CLICKED, OnClicked)
  18. END_MESSAGE_MAP()
  19. // Gestionnaires de messages CHyperLink
  20. void CHyperLink::OnMouseMove(UINT nFlags, CPoint point)
  21. {
  22. CStatic::OnMouseMove(nFlags, point);
  23. ::SetCursor(AfxGetApp()->LoadCursor(MAKEINTRESOURCE(IDC_Hand)));
  24. }
  25. void CHyperLink::OnClicked()
  26. {
  27. ShellExecute(NULL, "open", m_Lien, NULL, NULL, SW_MAXIMIZE);
  28. }


 
-----Utilisation dans la Vue de type CFormView-----
CMyFormView.h : données membres à rajouter

Code :
  1. CHyperLink m_Porsolt;
  2. CHyperLink m_IUT;


Rajouter la routine DDX dans DoDataExchange()

Code :
  1. DDX_Control(pDX, IDC_Sigle_Porsolt, m_Porsolt);
  2. DDX_Control(pDX, IDC_Sigle_IUT, m_IUT);


Initialisation du lien (dans le constructeur de la classe CMyFormView()

Code :
  1. //Initialise les Liens vers les sites Internet
  2. m_Porsolt.m_Lien="http://www.porsolt.com";
  3. m_IUT.m_Lien="http://www.univ-rennes1.fr/iutren/geii";


Message édité par choupinou le 20-07-2004 à 10:00:39

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Résolu] Mouvement de la souris au-dessus d'un contrôle CStatic

 

Sujets relatifs
[resolu] moteur de recherche php[résolu] bouton "ok" non cliquable dans un form si champs vides
[SQL SERVER] Comparaison de table [Presque resolu]savoir si une variable est définie en testant le début du nom[resolu]
[css] Imbriquer des tags ? [Résolu][RESOLU] - [VB6] Obtenir le nombre de dimensions d'un tableau ?
[SQL] [Résolu] "Mélange" de données[resolu] [Javascript] Afficher un DIV onclick
perl + regex [resolu][Python] TypeError sur une concaténation de chaines [Résolu]
Plus de sujets relatifs à : [Résolu] Mouvement de la souris au-dessus d'un contrôle CStatic


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR