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] Boite de dialogue qui se lance pas


Sujet :

MFC

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut [MFC] Boite de dialogue qui se lance pas
    'Soir,

    IDE:VisualC++6.0

    J'ai une boite de dialogue avec ca classe associer, CMaDlg.

    Dans mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	AfxMessageBox("Salut");
    	CMaDlg *pMaDlg = new CMaDlg(AfxGetMainWnd());
    	pMaDlg->DoModal();
    	delete pMaDlg;
    J'ai bien la boite avec "Salut", par contre ma boite de dialogue ne s'affiche pas...
    En mode debug j'ai apres l'initialisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // Avec le QuickWatch
    pMaDlg
     |->     CDialog hWnd = 0x0000
     |->     CDialog hWnd = 0x0000
     |-> ...
    ...
    Donc je vois bien que c'est mal initialise mais pourquoi? je comprend pas...

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    il faudrait plutot voir l'initdialog de ta CDialog.
    Essaie de tracer pas à pas pour voir à quel endroit il te retourne un handle égal à 0

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Salut,

    Ben en fait:
    Voila:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       // <- pMaDlg = n'importe quoi, normal pointeur non initialise
     
       CMaDlg *pMaDlg = new CMaDlg(AfxGetMainWnd()); // <- La j'ai deja le hWnd a NULL
       pMaDlg->DoModal(); // <- Et la ca plante voir code 1
       delete pMaDlg;
    Code 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // fichier windows: dlgcore.cpp
    // C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC\DLGCORE.CPP
     
    int CDialog::DoModal()
    {
    	// can be constructed with a resource template or InitModalIndirect
    	ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
    		m_lpDialogTemplate != NULL);
     
    	// load resource as necessary
    	LPCDLGTEMPLATE lpDialogTemplate = m_lpDialogTemplate;
    	HGLOBAL hDialogTemplate = m_hDialogTemplate;
    	HINSTANCE hInst = AfxGetResourceHandle(); // <-- Ici
    Et le truc c'est que j'ai cree la fonction OnInitDialog() dans ma classe mais je passe jamais dedans.
    C'est peut-etre le constructeur, non? car au constructeur, j'ai deja:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Avec le QuickWatch
    pMaDlg
     |->     CDialog hWnd = 0x0000
     |->     CWnd hWnd = 0x0000
     |-> ...

  4. #4
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Points : 138
    Points
    138
    Par défaut
    Salut, c'est normal que ton hWnd soit null après l'appel au constructeur de ta dial puisqu'à ce moment là elle n'a pas encore été crée.
    Généralement ton problème se produit quand les MFC n'arrivent pas à trouver la ressource associée à ta dial. Regarde si ta ressource existe et si c'est le cas, essaie de faire un Rebuid All.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Yo!

    J'ai trouver, ca venait bien des resources, en fait il me fallait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AFX_MANAGE_STATE(AfxGetStaticModuleState())
    Sinon Brouzouf: oui, c'est normal mais je savai pas .

    Donc le code final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    AFX_MANAGE_STATE(AfxGetStaticModuleState())
       CMaDlg *pMaDlg = new CMaDlg(AfxGetMainWnd());
       pMaDlg->DoModal();
       delete pMaDlg;
    J'ai pas encore tres bien compris pourquoi il faut rajouter cette ligne mais apparement, c'est necessaire pour pouvoir lancer des boites de dilogue.

    En meme temps si quelqu'un comprend cette ligne je veut bien une explication .

    Bye

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

Discussions similaires

  1. boite de dialogue qui n'apparait pas
    Par tanaka59 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/10/2012, 15h57
  2. ListView dans une boite de dialogue qui ne se met pas à jour
    Par Invité dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 26/03/2012, 11h16
  3. Boite de dialogue qui ne s'affiche pas
    Par Manankasina dans le forum Windows
    Réponses: 2
    Dernier message: 04/12/2008, 09h16
  4. Réponses: 3
    Dernier message: 17/06/2004, 16h59
  5. OpenGL - MFC Boite de dialogue
    Par cybertigre dans le forum OpenGL
    Réponses: 3
    Dernier message: 15/04/2004, 16h09

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