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] Création manuelle de contrôle bouton


Sujet :

MFC

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 1
    Points
    1
    Par défaut [MFC] Création manuelle de contrôle bouton
    Bonjour à tous les informaticiens (inadaptés quoi original.gif)

    Je voulais vous soumettre un petit soucis que je rencontre dans le développement d'un petit jeu de cartes en visual c++ 6 (introductory edition, ou un truc dans le genre... bref, la version gratuite quoi).

    Je cherche à créer manuellement un bouton afin de valider le choix de cartes.

    De fait,
    Un des attributs de ma classe est : CButton *bouton;
    Dans le constructeur de ma classe, j'ai alloué ce pointeur.
    Et dans le OnInitialUpdate de ma vue, j'ai créé une instance de ce bouton (avec bouton->Create(je vous passe les arguments).

    Mon problème arrive ici : je veux afficher ce bouton qu'à un certain moment du déroulement de mon appli, et il s'affiche bien.
    Mais lorsque que je clique sur les cartes du jeu, le bouton s'efface et ne revient pas.
    (pour l'afficher, j'utilise bouton->ShowWindow(SW_SHOW)clindoeil.gif

    J'ai l'impression qu'il revient à son état initial à chaque fois que la fenêtre se réactualise.
    Et fait un ShowWindow(SW_SHOW) alors que le bouton est déjà affiché le rend invisible.

    J'ai tenté de positionner des flag à 0 ou 1 suivant les cas, mais rien n'y a fait sad.gif

    J'ai même tenté de l'afficher dès le départ de l'appli (au moment du Create) mais le bouton s'efface au moment du premier clic sur une de mes cartes...

    Note : La gestion des clics de souris sur les cartes est traité avec OnMouseMove pour récupérer les coordonnées réelles de ma souris, et avec OnLButtonDown pour la gestion de la position des cartes sur l'écran.

    Dernière note : Il semble en fait que le bouton ne disparaisse pas complétement...

    En fait, si, une fois qu'il n'apparait plus à l'écran, je clique à l'endroit où il doit être sur l'écran, il réapparait.

    Bien sur, jusqu'à ce que je reclique sur un autre endroit de l'écran, auquel cas il redisparait :/

    Quelqu'un y comprend quelque chose ?

    Merci d'avance à tous clindoeil.gif

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    Bonjour,

    En visualC++ 6.0 je te conseille de creer ton bouton dans tes ressources classiquement à l'endroit ou tu veux qu'il soit.
    De lui ajouter un variable membre de type control a ton CButton (nommé par ex m_mybutton.

    dans ton code si tu veux faire disparaitre ou apparaitre le bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	m_mybutton.ShowWindow(SW_HIDE);
     
    	m_mybutton.ShowWindow(SW_SHOWNORMAL);
    bon courage

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci de ta réponse

    Je tenterais ca dès ce soir

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonsoir tout le monde

    J'ai créer un bouton grâce à l'utilitaire de ressources...

    J'ai créer une variable membre de type control à mon CButton...

    Je le SW_HIDE au démarrage de l'appli, et je le SW_SHOW à un autre moment...

    Mais j'ai toujours le même soucis... si je clic autre part que sur le bouton, il disparait... et il réapparait si je clic à l'endroit où il est supposé se situer...

    Je ne comprends rien :/

  5. #5
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    bonsoir,
    creation manuelle ou par l'ide ?
    si manuelle montre le code de creation .
    a quels endroits tu sw_show et sw_hide ?
    apres le sw_show fait un invalidate du bouton .

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Salut

    A la base, c'était une création manuelle... mais on m'a conseillé de passer par l'IDE, ce que j'ai fait... mais j'ai toujours le même problème.

    Mon SW_HIDE, je l'ai placé dans la méthode OnInitialUpdate()
    Mon SW_SHOW est dans le méthode OnDraw()...

    Euh... la méthode invalidate marche comment ?
    C'est une méthode de la classe CView ou de CWindow... donc il veut pas de CButton...

    J'ai raté un truc ?

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    pas de SW_SHOW dans Ondraw ...
    sinon a chaque dessin de la fenetre (recouvrement ou autre) ça repasse dedans ce qui peut expliquer ton pb d'affichage....
    pour faire un invalidate du bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_MyButton.Invalidate();

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Et bien ca marche avec le Invalidate sur le bouton ^^ Merci beaucoup !

    Pourrais-tu m'indiquer dans quelle méthode il serait préférable de mettre mon ON_SHOW ?

    Car, à part dans OnDraw, je ne vois pas...

    Merci encore

  9. #9
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    en général tout ce qui est initialisation on met ça dans la fonction
    OnInitialUpdate pour une CFormView et OnInitDialog pour une CDialog.

    En général ce genre d'opération est conditionné à l'action d'un autre contrôle
    ou option menu ,sinon je ne vois pas l'intérêt qu'il soit caché au départ si c'est pour le remettre visible tout de suite après ...

    La question c'est pourquoi tu as besoin de faire ça ?
    par défaut les contrôles sont visibles sauf si on décoche visible dans les ressources..

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Je suis en train de développer un jeu de tarot...

    Je me sers de OnDraw pour afficher les cartes données à un joueur, et je veux, s'il prend la main, afficher le chien (6 cartes qu'il peut prendre et les échanger avec 6 autres de sa main, au cas où tu ne connais pas le jeu )

    Une fois qu'il a les 6 cartes en plus dans les mains, je me ressers de OnDraw pour afficher ses cartes initiales avec celles du chien devant lui.
    Le bouton doit s'afficher à ce moment, afin qu'il puisse valider le fait qu'il a finit d'échanger ses cartes et qu'il est prêt à commencer...

    Voili voilou

Discussions similaires

  1. [API win32 sans MFC] Création textbox et evenement bouton
    Par dacid dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 17/05/2006, 11h03
  2. Réponses: 16
    Dernier message: 04/01/2006, 14h54
  3. Réponses: 7
    Dernier message: 26/10/2005, 12h54
  4. [MFC] SendMessage entre 2 contrôles
    Par Manson dans le forum MFC
    Réponses: 6
    Dernier message: 13/06/2005, 09h33
  5. Création dynamique de contrôles
    Par qi130 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 17/12/2004, 13h19

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