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

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

Marsh Posté le 15-07-2004 à 16:55:20    

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
Reply

Marsh Posté le 15-07-2004 à 16:55:20   

Reply

Marsh Posté le 16-07-2004 à 15:56:16    

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.

Reply

Marsh Posté le 16-07-2004 à 15:58:44    

Tout les infos sont sur le site microsoft MSDN

Reply

Marsh Posté le 16-07-2004 à 16:50:55    

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.
 

Reply

Marsh Posté le 16-07-2004 à 17:26:49    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed