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

Visual C++ Discussion :

Boîtes de dialogue modale - Win 32


Sujet :

Visual C++

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 173
    Par défaut Boîtes de dialogue modale - Win 32
    Bonjour,

    Les boîtes de dialogue créées avec la boîte à outils sont modales.
    Après action sur CANCEL d'une boîte de dialogue, je souhaite afficher une Message Box permettant de valider ou non le choix.
    Le Pb vient à priori du fait que la boîte de dialogue est modale et qu'il est impossible de valider l'un des deux boutons de la Messsage Box.

    Quelle serait la solution ?
    Peut on rendre la boîte de dialogue non modale (je n'ai pas vu de propriété s'y rapportant dans la Tool Box) ?

    Merci à tous

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Citation Envoyé par mulfycrowh Voir le message
    Le Pb vient à priori du fait que la boîte de dialogue est modale et qu'il est impossible de valider l'un des deux boutons de la Messsage Box.

    Quelle serait la solution ?
    De mémoire, GetDlgItem(IDOK) et GetDlgItem(IDCANCEL) doivent te retourner les boutons OK et CANCEL que tu peux valider ou non selon ton choix (CWnd::EnableWindow).
    Sinon, tu peux spécialiser CDialog::OnOk et CDialog::OnCancel. Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CMyDialog::OnOk()
    {
       if(je_peux_arreter)
       {
            CDialog::OnOk();
       }
    }
    Idem pour OnCancel.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Normalement, le fait qu'une boîte de dialogue soit modale n'est pas censé empêcher l'affichage d'une autre boîte de dialogue modale par celle-ci: Ça s'empile...
    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.

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 173
    Par défaut
    Bonjour,

    Dans le traitement du message WM_COMMAND j'ai ajouté le code suivant :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    case WM_COMMAND:
    switch (LOWORD(wParam))
    {
    case IDOK:
    case IDCANCEL:
    {
    					//EndDialog(hwndDlg, 0);
                        WORD LanguageId;
    					if (My_Turn_For_You.Get_PLanguage()->Get_Language()==ENGLISH)
                           LanguageId = MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US); 
    					if (My_Turn_For_You.Get_PLanguage()->Get_Language()==GERMAN)
                           LanguageId = MAKELANGID(LANG_GERMAN,SUBLANG_GERMAN_AUSTRIAN);
    					if (My_Turn_For_You.Get_PLanguage()->Get_Language()==FRENCH)
                           LanguageId = MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_CANADIAN); 
    		            int msgboxID = MessageBoxEx
    	                               (
    								   NULL,
    								   get_translation(ID_MSG_VALID_SWITCH_OFF).c_str(),
    					               get_translation(ID_MSG_COPYRIGHT).c_str(),
    					               MB_YESNO | MB_ICONWARNING,
                                       LANG_GERMAN
    					               );
    					switch(msgboxID)
    					{
    						case IDYES:
                            int i = 0;
    					}
    					return false;
    					}
    				break;
    			}

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 173
    Par défaut
    Bonjour,

    Dans le traitement du message WM_COMMAND de la DialogBox j'ai ajouté le code suivant :

    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
    20
    21
    22
    23
    24
     
    case WM_COMMAND:
    switch (LOWORD(wParam))
    {
    case IDOK:
    case IDCANCEL:
           {
           //EndDialog(hwndDlg, 0);
           WORD LanguageId;
           int msgboxID = MessageBoxEx
           (
           NULL,
           get_translation(ID_MSG_VALID_SWITCH_OFF).c_str(),
           get_translation(ID_MSG_COPYRIGHT).c_str(),		               
           MB_YESNO | MB_ICONWARNING,
           LANG_GERMAN
           );
           switch(msgboxID)
    	{
    	case IDYES:
                 int i = 0;     // pour test
    	}
          }
          break;

    Lorsque je clique sur CANCEL de la DialogBox, la MessageBox s'affiche bien mais je n'ai pas le focus sur celle-ci et je ne peux ni cliquer sur YES, ni sur NO.
    Pour m'en sortir, je dois fermer la DialogBox, là j'ai bien le focus sur la MessageBox mais ceci n'est pas cohérent avec ce que je souhaite faire.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Le premier paramètre de MessageBoxEx() doit être le HWND de ta boîte de dialogue.
    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.

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 173
    Par défaut
    J'ai fait la modif, cela ne fonctionne toujours pas : impossible de cliquer sur les deux boutons de la MessageBox et de plus impossible de fermer la DialogBox ...

    Au secours !

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 173
    Par défaut
    Bonjour,

    J'avais une erreur dans la gestion des messages de DialogProc ...
    Nul n'est parfait !

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

Discussions similaires

  1. Boîte de dialogue modale
    Par lstoitchev dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/08/2013, 16h46
  2. Une boîte de dialogue modale avec un contrôle UIActionSheet
    Par adissa357 dans le forum Objective-C
    Réponses: 1
    Dernier message: 29/07/2013, 01h49
  3. Création d'une boîte de dialogue non modale
    Par rob24 dans le forum MFC
    Réponses: 8
    Dernier message: 06/05/2008, 12h45
  4. OpenGL et boîte de dialogue "non-modal"
    Par Gerber samuel dans le forum OpenGL
    Réponses: 1
    Dernier message: 27/02/2006, 23h49

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