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 :

désactiver un formView


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 112
    Par défaut désactiver un formView
    Dans mon application SDI avec un formulaire, j'ai besoin d'ouvrir Des dialogues personnalisés après click sur un bouton.

    QUand ce dialog s'ouvre, j'aiemrai que le formulaire derrière ne soit pas accessible.

    J'ai déjà fait différents avec les propirétés des dialog, avec doModal,.... mais ça ne marche pas.

    Quelqu'un pourrait il m'aider?

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    (re)Bonjour

    je ne comprends pas trop ton problème
    pourrais-tu être plus précis stp?

    Déjà pourquoi un DoModal sur ta nouvelle dialog ne marche pas? Le principe du DoModal est que la Dialog ouverte avec DoModal a l'exclusivité du focus, c'est à dire qu'elle est la seule fenêtre (de l'application courrante) qui peut avoir le focus (tant qu'elle est ouverte bien sur).

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 112
    Par défaut
    Pom pom pom...Comment préciser....

    J'ai un formulaire de base MyForm.
    Ce formulaire à tout un tas de controles.
    Un de ces controles (un bouton) lorsque je clique dessus
    doit m'ouvrir un Dialog précis,MyDialog avec tout .
    JE veux que ce Dialog lorsqu'il est ouvert rende inaccesible
    l'accès à MyForm.

    Je ne dois pas savoir utiliser DoModal car c'est ce que je pensais aussi.
    De plus comme je l'utilise ça fait bugger l'appli.

    DoModal n'entraine t il pas que je ne puisse utiliser d'autres applications?
    Je ne veux pas que l'utilisateur soit bloqué par MyDialog s'il veut lancer internet ou word par exemple.

    Mon utilisation de DoModal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CMyDialog *dlg = new CMyDialog(this);
    dlg->Create(IDD_MON_DIALOG);
     
    // Affichage
    dlg->DoModal();
    voili voilou j'espère avoir été oun poquito plus clair

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    DoModal créé une boite de dialogue modale au sein de l'application, ce qui signifie que toutes les autres fenêtres de l'application ne peuvent récupérer le focus tant qu'elle est ouverte. Mais elle n'empêche pas de switcher d'une application à l'autre 'en utilisant alt+tab par exemple).

    Quelle est l'erreur générée par ton code?

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 112
    Par défaut
    c'est une erreur de type:
    Debug Assertion FAILED

    J'ai l'impression qu'avec DoModal je ne peux pas ouvrir mes CDialog

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Arf, je ne peux pas deviner...
    Citation Envoyé par gigigao
    Mon utilisation de DoModal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CMyDialog *dlg = new CMyDialog(this);
    dlg->Create(IDD_MON_DIALOG);
     
    // Affichage
    dlg->DoModal();
    Est-ce que dlg est valide?
    Que renvoie Create?
    Ca plante où? Quel est le message d'erreur exact?

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 112
    Par défaut
    le dlg doit être valide car quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CMyDialog *dlg = new CMyDialog(this);
    dlg->Create(IDD_MON_DIALOG);
     
    // Affichage
    dlg->Show_Window(SW_SHOW);
    Tout se passe bien. mon application marche comme je le souhaiterai sauf pour le fait puisse modifier MyForm

    Pour l'erreur:

    je lance l'application = OK
    je clique sur le bouton avec le code précédent
    utilisant DoMOdal = NOK
    et un popup apparait disant:

    debug assertion failed
    program:[chemin de mon porgramm]
    File:dlgcore.cpp
    line:459

    Il me demande si je veux debugger l'appli. je dis oui.

    dans la fonction HWND CDialog:: PreModal(),
    Il me positionne sur ASSERT(m_hWnd == NULL);
    En faisant défilé avec le debuggeur:
    - récupére un pointeur sur l'appli.
    - défini l'aplli enableModeless = FALSE
    - cherche le parent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HWND hWnd = CWnd::GetSafeOwner_
                    (m_pParentWnd->GetSafeHwnd(), &m_hWndTop);
    - bug à la création du hook :AfxHookWindowCreate(this);
    car "pThreadState->m_pWndInit = pWnd;" plante.
    pWnd n'est pas NULL car il passe la ASSERT mais ça valeur n'est pas lisible.
    pWnd = le "this" de la création du hook

  8. #8
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Avant toute chose, l'utilisation du DoModal est la solution pour ce que tu veux faire. Il faut donc parvenir à l'utiliser.
    Ce que je ne comprend pas, c'est que ça plante avec DoModal, et pas avec ShowWindow()...
    Reprenons:
    Citation Envoyé par gigigao
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CMyDialog *dlg = new CMyDialog(this); //ligne 1
    dlg->Create(IDD_MON_DIALOG); //ligne 2
     
    // Affichage
    dlg->DoModal(); //ligne 3
    Commence par mettre un point d'arrêt (F9) à la ligne 1.
    Ensuite, il faut effectuer un debug pas à pas (F10).
    Ca te permettra de voir à quelle ligne exactement ça plante et de voir les valeurs de tes variables.
    Dis-moi à quoi ressemble la variable dlg à la ligne 2.
    Dis-moi si ça plante à la ligne 2 ou à la ligne 3.

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 112
    Par défaut
    Citation Envoyé par r0d
    Avant toute chose, l'utilisation du DoModal est la solution pour ce que tu veux faire. Il faut donc parvenir à l'utiliser.
    Ce que je ne comprend pas, c'est que ça plante avec DoModal, et pas avec ShowWindow()...
    Reprenons:

    Commence par mettre un point d'arrêt (F9) à la ligne 1.
    Ensuite, il faut effectuer un debug pas à pas (F10).
    Ca te permettra de voir à quelle ligne exactement ça plante et de voir les valeurs de tes variables.
    Dis-moi à quoi ressemble la variable dlg à la ligne 2.
    Dis-moi si ça plante à la ligne 2 ou à la ligne 3.
    hop c'est parti.

    Bon alors le point d'arrêt c'est fait.

    - dlg = 0x00463080. Ces membres m'ont l'air d'être bien initialisés mais la valeur de dlg est écrit en rouge.
    - ça bug après l'appel à DoModal dans la fonction
    AfxHookWindowCreate(this); contenu dans la fonction premodal.


  10. #10
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 112
    Par défaut
    Information en plus:

    Create retourne 1

  11. #11
    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,
    il n' y a pas de Create a faire avec DoModal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CMyDialog *dlg = new CMyDialog(this); //ligne 1
    // Affichage
    dlg->DoModal(); //ligne 3

  12. #12
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 112
    Par défaut
    Merci ça marche.

    Là je suis bien dégouté d'avoir perdu une partie
    de mon après midi bêtement.

    Et je suis encore plus dégouté de t'avoir dérangé r0d.
    Désolé.

    Je ferme avec OnOK c'est bon?

  13. #13
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    C'est surtout moi qui m'excuse de ne pas l'avoir vu de suite
    Merci farscape

    Oui, OnOK() c'est bon pour fermer la fenêtre.

  14. #14
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 112
    Par défaut
    C'est sur merci farscape

    bonne continuation. Et puis tu m'auras permis d'apprendre à bien me servir du debugger. c'est déjà pas mal

    allez hop résolu.

    see you

  15. #15
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Oui, heureusement que farscape est passé par là sinon vendredi on y était encore

    <mode "r0d qui essaie de se trouver des excuses": [ON]>
    bon, il faut dire que j'ai beaucoup de boulot aujourd'hui (et pour les 2 ou 3 jours à venir... au moins)

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

Discussions similaires

  1. Désactiver la multi-sélection d'une grille
    Par Riko dans le forum Composants VCL
    Réponses: 6
    Dernier message: 17/06/2003, 09h47
  2. Comment désactiver Ctrl+Alt+Del sous Windows XP
    Par ETOKA dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 04/06/2003, 13h34
  3. Désactivation de la souris
    Par mika dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 13/03/2003, 13h15
  4. Désactiver les touches F1, F2, F3, F4, F5 dans IE
    Par ZiZouJH dans le forum Flash
    Réponses: 7
    Dernier message: 17/02/2003, 09h59
  5. Réponses: 8
    Dernier message: 17/05/2002, 09h08

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