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 :

[MFC] probleme de SendMessage


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 80
    Par défaut [MFC] probleme de SendMessage
    Bonjour,
    J'ai créé une classe dérivant d'un CButton et dans ma fenêtre principale, je crée une instance de cette nouvelle classe.
    Je veux pouvoir gérer l'evennement d'un click de la souris sur une instance de ma nouvelle classe; pour cela, j'ai rajouté à la main dans le gestionnaire de message de mon CDialog un ON_BN_CLICKED avec l'ID de l'instance de ma classe et le nom de la fonction à appeler.
    Mon problème, c'est que quand je fais un SendMessage depuis ma nouvelle classe, mon CDialog n'intercepte pas le message.
    par exemple, dans mon OnBnClicked de ma nouvelle classe, j'ai mis:
    ::SendMessage(hDlg, BN_CLICKED, 0, m_hWnd) où hDlg est le handle de mon CDialog. Je ne suis pas sûr de ma façon d'envoyer le message donc est ce que c'est correct? et si oui, pourquoi ça ne marche pas? si non, comment je fais?
    Merci d'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Par défaut
    Pq ne pas gerer directement le BN_CLICKED dans ta dialog? Comme ca tu sais directement qu'on a clique sur ton bouton... Non?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 80
    Par défaut
    Non, ce n'est pas possible car je crée mon bouton dynamiquement et il a une taille de 0x0 donc, en théorie, il n'existe pas sur ma CDialog...
    En fait, pour être plus précis, je mets à la place du bouton une bitmap que je modifie en fonction de la position du curseur (si il survol l'image par exemple)
    Bref, je fais un bouton personnalisé.
    Je gère bien le ON_BN_CLICK dans ma CDialog mais comme mon bouton a une taille nulle (ça évite des bugs d'affichage), je ne clique jamais dessus... D'où ma nécéssité d'envoyer manuellement un BN_CLICK lorsque le curseur se trouve sur l'image et avec le bouton de la souris enfoncé.

  4. #4
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    je comprends pas tu veux cliquer sur une image c'est pour ca que tu utilise un bouton de taille nulle c'est ca ?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    Salut

    Utilise plutot PostMessage. Ca ne doit pas marcher avec SendMessage tout simplement parce que ta fenetre principale ne peut pas recevoir le message tant qu'elle est occuppee par la fenetre secondaire.
    Ensuite si ca ne marche toutjours pas essaye plutot d'attrapper ton message avec un ON_MESSAGE (joue le meme role que ON_BN_CLICKED, mais en plus generic).

    J'espere que ca t'aidera

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 80
    Par défaut
    c'est vrai que dit comme ça, ça a l'air tres con...
    Je vais donc expliquer comment j'ai procédé pour en arriver là:
    Il existe sur le net une source vachement interressante qui s'appelle BoutonTransparent et qui permet de créer des boutons personnaliés avec un masque transparent. Le problème c'est que je n'arrivais pas à utiliser cette classe avec un projet MFC. J'ai donc décidé de la refaire avec des MFC et en l'améliorant.
    A l'origine, la classe se "servait" d'un bouton existant pour gerer les messages, je me suis dit que je vais la faire descendre directement d'un CButton sur lequel j'afficherai une image aux dimensions du bouton. Mais il y avait quelques bugs d'affichage lorsque par exemple je cliquais dessus, on voyait un bref instant le bouton au lieu de l'image et ça m'embetait... J'ai donc décidé de mettre le bouton à la taille nulle et l'image à sa taille originale et donc, j'en suis arrivé là où j'en suis.

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Par défaut
    Ton boutons tu peux lui attribuer un CBitmapButton.... et la on voit que l'image...

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Par défaut
    Je comprends pas trop mais voici le reponse a ta requete (enfin je pense :-)):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SendMessage(hParent,WM_COMMAND, MAKELONG(ID_de_ton_control, BN_CLICKED), (LPARAM)hButton);
    

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/06/2005, 13h08
  2. [MFC] probleme d'affichage en mode explorer
    Par ryu20 dans le forum MFC
    Réponses: 2
    Dernier message: 11/02/2005, 20h33
  3. [MFC] Probleme d'actualisation d'une listbox
    Par Robleplongeur dans le forum MFC
    Réponses: 5
    Dernier message: 13/05/2004, 14h15
  4. [MFC ]Probleme de linkage d'une dll
    Par Lysis dans le forum MFC
    Réponses: 9
    Dernier message: 22/01/2004, 14h51
  5. [MFC] probleme de rafraichissement d'une image
    Par Vestaproman dans le forum MFC
    Réponses: 6
    Dernier message: 09/01/2004, 23h59

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