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 :

pb de boites de dialogues


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 176
    Points : 78
    Points
    78
    Par défaut pb de boites de dialogues
    Sous visual C++ 6.0, j'ai crée un projet AppWizard. Sur ma fenêtre principale, j'ai ajouté un bouton qui doit ouvrir une boite de dialogue nommé IDD_PASS que j'ai crée avec l'aide de l'onglet ResourceView et "insert Dialog". Sur cette boite de dialogue, j'ai ajouté un autre bouton qui doit ouvrir une nouvelle boite de dialogue.
    Pour cela, j'ai mis ce code derrière chaque boutons crées:

    ce code est derrière le bouton de la fenêtre principale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CDialog *pDialog;
    pDialog = new CDialog();
     
    pDialog->Create(IDD_PASS, NULL);
    pDialog->ShowWindow(SW_SHOW);

    ce code est derrière un bouton de la boite de dialogue nommée IDD_PASS pour ouvrir la boite de dialogue IDD_ADMIN:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CDialog *pDialog2;
    pDialog2 = new CDialog();
     
    pDialog2->Create(IDD_ADMIN, NULL);
    pDialog2->ShowWindow(SW_SHOW);
    Seulement voilà, dès que l'on clique sur le bouton de la boite de dialogue intitulée IDD_PASS, celle-ci se ferme et je ne comprends pourquoi !

    Pouvez-vous m'aider ?

    balises [code] rajoutées par r0d

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Je parie que tu appelles CDialog::OnOK() dans le code de traitement du bouton. Retire cet appel et la boîte de dialogue ne se fermera pas.

    PS: En créant des boîtes de dialogue dans un projet MFC, tu n'as pas une classe qui est directement associée à la boîte de dialogue en question ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 176
    Points : 78
    Points
    78
    Par défaut ça n'a pas marché
    J'ai bien retiré la ligne CDialog::OnOK() mais ça ne change rien.
    Sinon, j'ai crée une classe derrière chaque boite de dialogue, héritée de CDialog.

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    premiere remarque:
    il faut utiliser la classe générée pour la dialogue et pas la classe de Base CDialogue ..
    si ta dialogue se ferme c'est que ton bouton posséde la proprieté default button.
    et enfin la fermeture d'une dialogue par la touche entrée ou echap est normale et correpespond au fonctionnement standard.
    voir faq:
    http://c.developpez.com/faq/vc/?page...rapEscapeEnter

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 176
    Points : 78
    Points
    78
    Par défaut ok d'accord...
    Je ne crois pas avoir bien compris car j'ai tapé le code suivant dans le .cpp de la classe CPassword gérant la boite de dialogue ID_PASS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    BOOL CPassword::OnCommand(WPARAM wParam, LPARAM lParam) 
    {
        CWnd *pWnd = GetFocus();
        switch(wParam)
        {
          case IDOK: if(pWnd!=GetDlgItem(IDOK))
                     {
                          return FALSE;
                     }
                     break;
     
          case IDCANCEL:if(pWnd!=GetDlgItem(IDCANCEL))
                        {
                            return FALSE;
                        }
                        break;
        }
        return CDialog::OnCommand(wParam, lParam);
    }

    et dans le .h, j'ai déclaré ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    virtual BOOL OnCommand(WPARAM wParam,LPARAM lParam );
    et si je met ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     CWnd::OnCommand virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
    le compilateur m'indique au moins 10 erreurs !

    Je ne sais pas s'il faut que je fasse autre chose mais en tous cas, tel quel, cela ne fonctionne pas


    pense à mettre les balises [code], merci

  6. #6
    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

    Je pense que tu ne n'utilise pas le Appwizard suffisamment.
    Si je comprends bien tu veux faire une fenetre pour entrer un mot de passe.

    Donc tu as crees dans les ressources une dialogue avec un insert Dialog et tu as mis les controles dedans.
    Si tu fais CTRL + W tu lance le wizard qui va te demander de creer ou d'utiliser une classe existente pour cette dialogue, tu la crees avec le nom que tu veux par ex CMyPass.

    Le classwizard va donc de cree le .h et le .cpp pour ta dialogue.
    Etant donné que tu veux faire une demande de password il faut que ta fenetre soit modale (l'utilisateur doit forcement la fermer ( la fenetre) pour revenir a la fenetre qui l'a cree.
    Donc dans le .cpp de la methode ou tu as ton bouton pour lancer la fenetre IDD_PASS tu ajoute le .h avec un include Puis dans le corps de la methode de ton bouton une variable sur ta classe dialogue et la façon de l'afficher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CMypass dlg;
    dlg.DoModal();
    PS: il ya un excellent tuto de Farscape "demarer avec les MFC" qui t'explique cela trés bien "

    Cordialement

Discussions similaires

  1. Pb plusieurs boites de dialogues
    Par schnito dans le forum MFC
    Réponses: 10
    Dernier message: 25/02/2004, 21h44
  2. [MFC] rendre une boite de dialogue inactive
    Par Vestaproman dans le forum MFC
    Réponses: 8
    Dernier message: 22/01/2004, 14h09
  3. Affichage d'une boite de dialogue nonmodale avec MFC
    Par the.cable.guy dans le forum Windows
    Réponses: 3
    Dernier message: 04/07/2003, 17h59
  4. Réponses: 5
    Dernier message: 04/04/2003, 15h02
  5. Comment cree une boite de dialogue parcourir
    Par kenshi dans le forum MFC
    Réponses: 5
    Dernier message: 06/01/2003, 10h30

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