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

MFC Discussion :

WM_MOUSEMOVE et Picture control


Sujet :

MFC

  1. #1
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut WM_MOUSEMOVE et Picture control
    Bonsoir à tous,
    J'utilise le message WM_MOUSEMOVE pour récupérer les coordonnées de ma souris. Jusque là, pas de problèmes je récupère bien les coordonnées en pixels de la position de ma souris.

    Sur ma boîte de dialogue, j'ai mis plusieurs CStatic qui sont en fait des images bitmap (Picture Control). Le problème, c'est que j'ai constaté que lorsque ma souris passe sur ces contrôles, aucun message WM_MOUSEMOVE n'est envoyé, comme si la présence des images inhibait l'émission du message. Est-ce parce que la souris n'est plus vraiment sur la boîte de dialogue (le fond de la fenêtre), mais sur un contrôle de la boîte de dialogue? Est-ce une toute autre raison toute bête, genre une option à cocher ou une variable à initialiser?
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    c'est pour ça que je prefere utiliser un bouton owner draw au moins je fais ce que je veux ...
    http://c.developpez.com/faq/vc/?page...awBitmapInCtrl

  3. #3
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Effectivement, prendre un bouton et en faire ce qu'on veut pourrait être la solution, je vais sûrement faire ça. Mais juste par curiosité, est-ce que l'histoire de l'inhibation du WM_MOUSEMOVE par un CStatic bitmap est un problème (ou pas) connu? Personne n'a jamais eu ce problème? Est-ce mon Visual 2005 qui me joue des tours?

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    tu as essayé de cocher l'option notify du static ?

  5. #5
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Citation Envoyé par farscape
    tu as essayé de cocher l'option notify du static ?
    Je n'avais pas essayé car l'éditeur indiquait que cela activait les notifications seulement pour le clic et le double-clic. Néanmoins j'ai voulu vérifier mais non ça ne change rien.

    Par contre, j'ai constaté que cela ne se limitait pas seulement à un Picture Control, mais à tous les contrôles de ma boîte de dialogue! (CListBox, CEdits, CButton,...). Ce pseudo-problème est donc bien volontaire et ancré dans le fonctionnement de Visual même si je n'arrive pas à trouver de textes là-dessus, ou alors c'est mon Visual qui plante!

    Franchement, je lance un appel à quiconque qui ait déjà constaté ça et éventuellement trouvé un paramètre ou une variable pouvant l'expliquer!

  6. #6
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    En fait je crois que j'ai trouvé et c'est tout con. Tous les contrôles héritent de CWnd, le WM_MOUSEMOVE est donc sûrement envoyé au contrôle et non plus à la boîte de dialogue. Ce qui veut dire qu'il faudrait que je dérive chacun de mes contrôles pour implémenter le OnMouseMove() de ceux-ci... Un peu laborieux tout de même, juste pour récupérer des coordonnées. Je vérifie et je mettrai à jour le "Résolu" si ça marche.

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par spoutspout
    En fait je crois que j'ai trouvé et c'est tout con. Tous les contrôles héritent de CWnd, le WM_MOUSEMOVE est donc sûrement envoyé au contrôle et non plus à la boîte de dialogue. Ce qui veut dire qu'il faudrait que je dérive chacun de mes contrôles pour implémenter le OnMouseMove() de ceux-ci... Un peu laborieux tout de même, juste pour récupérer des coordonnées. Je vérifie et je mettrai à jour le "Résolu" si ça marche.
    ah ben oui ,je croyais que c'est ce que tu faisais...
    chaque contrôle gere ses propres messages ,quelques notifications sont renvoyées sur la le parent ,mais pas ce type de message

  8. #8
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Effectivement ça marche mieux comme ça...
    Citation Envoyé par farscape
    chaque contrôle gere ses propres messages ,quelques notifications sont renvoyées sur la le parent ,mais pas ce type de message
    je pensais que le WM_MOUSEMOVE en faisait partie justement. Bon, c'est en faisant des boulettes qu'on progresse! Merci quand même!

  9. #9
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    En fait il me manque toujours quelque chose. J'ai fait ma classe héritée du CStatic avec un traitement sur le WM_MOUSEMOVE. Mais comment je signale à l'éditeur que ce picture contrôle correspond à ma classe dérivée? Suis-je obligé, pour chaque picture contrôle, d'ajouter une variable membre de type ma_classe_dérivée? J'avoue que ça m'aide pas trop, j'en ai une fouletitude, donc j'aurai une fouletitude de variables...

    En fait dans l'idéal je voudrais que la boîte de dialogue appelle le OnMouseMove() de ma classe dérivée au passage de la souris dessus, sans avoir à déclarer une variable pour chaque contrôle. Ou faire un nouveau contrôle si nécessaire? Est-ce possible?

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    hé bien tu n'as pas trop le choix l'editeur ignore complètement ta classe,
    c'est en remplaçant la classe de base par la tienne que tu obtiens un nouveau comportement (subclassing) en associant une variable au contrôle.
    l'autre voie c'est de faire un activex et de créer un l'évènement wm_mousemove pour l'utilisateur.
    celui-ci étant hérité de la classe CStatic ou picture.
    voir mon tuto sur la creation d'un activex MFC.

    Autre solution sans activex :
    tu fais ta classe héritée de CStatic, sur le message de wm_mousemove tu envois un message privé a la dialogue pour relayer le message:
    http://c.developpez.com/faq/vc/?page...s#PrivateNotiy
    pour éviter de devoir associer manuellement une variable a chaque contrôle
    tu peux le faire dynamiquement .
    tu parcours tous les contrôles de ta dialogue ,crées un contrôle dynamique pour subclasser le contrôle de la fenêtre.
    tu peux maintenir le tout dans un array pour libérer la mémoire en sortant.
    tu peux t'inspirer de ce post pour repérer les contrôles :
    http://c.developpez.com/faq/vc/?page...etEditReadOnly

  11. #11
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Merci bien pour toutes ces propositions, c'est clair que j'ai le choix!

    je crois que je tiens ma solution:
    Citation Envoyé par farscape
    tu peux le faire dynamiquement .
    tu parcours tous les contrôles de ta dialogue ,crées un contrôle dynamique pour subclasser le contrôle de la fenêtre.
    tu peux maintenir le tout dans un array pour libérer la mémoire en sortant.
    tu peux t'inspirer de ce post pour repérer les contrôles :
    http://c.developpez.com/faq/vc/?page...etEditReadOnly
    J'essaye ça ce week end. Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/02/2008, 17h13
  2. Afficher une IplImage dans un picture control
    Par didulle dans le forum OpenCV
    Réponses: 3
    Dernier message: 04/01/2008, 14h22
  3. Réponses: 3
    Dernier message: 20/09/2006, 18h49
  4. Réponses: 7
    Dernier message: 22/02/2006, 17h07
  5. [MFC] Picture Control
    Par mfrai02 dans le forum MFC
    Réponses: 3
    Dernier message: 29/07/2005, 01h48

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