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] CDialog dans une CFrameWnd


Sujet :

MFC

  1. #1
    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 [MFC] CDialog dans une CFrameWnd
    Bonjour à tous,

    j'ai une fenêtre de type CFrameWnd, et je voudrais y mettre une boite de dialogue de type CDialog à l'intérieur. J'ai donc créé ma CDialog et j'en déclare une instance dans ma frame (m_pMainDialog), je lui ait mi le type Child, et dans le onCreate de ma Frame je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    m_pMainDialog = new CMainDialog(this);
    m_pMainDialog->Create(IDD_DIALOG1, this);
    m_pMainDialog->ShowWindow(SW_SHOW);
    Mon problème c'est que je n'ai pas accès à certains des contrôles présents sur ma CDialog, et en particulier, les boutons. Comme se fais-ce?

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par r0d
    Bonjour à tous,

    j'ai une fenêtre de type CFrameWnd,
    ???? CFrameWnd ne permet pas de créer des fenêtres que je sache.
    CFrameWnd est crée pour les applis MDI et SDI pour gérer le fond de l'application.

    Pour accéder aux boutons il suffit d'appeler CWnd::GetDlgItem.
    J'ai fait une réponse sur des boutons radio y'a pas longtemps de cela

  3. #3
    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 euh pardon, je me suis très mal expliqué . En fait, quand je disais "pas accès", je voulais dire que je ne pouvais pas cliquer dessus quand l'appli était lancée. Ou plus exactement, quand je clique dessus, ça ne fais rien, l'événement OnClick n'est pas envoyé à la CDialog. Il doit être récupéré par la CFrameWnd et pas renvoyé...
    Tien, ça me donne une idée: je vais tenter de le renvoyer "à la main"

  4. #4
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    est ce que tu as essayer d'effectuer un cast .

    un truc de ce style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (dynamic_cast<CMainDialog*>(m_pMainDialog))->m_button

  5. #5
    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
    Erf, je m'excuse, j'ai dû mal m'expliquer:

    J'ai:
    * une frame qui érite de CFrameWnd (que je nommerais mainFrame)
    * une boite de dialogue de type Child qui hérite de CDialog (que je nommerais mainDialog)
    * tout un tas de controles, dont des Cedit et des CButton

    - Les controles sont contenus dans la mainDialog
    - La mainDialog est contenue dans la mainFrame

    Le problème:
    Tout s'affiche bien et tout, mais quand je clique sur les boutons, ils ne se passe rien. L'évenement ON_BN_CLICKED ne parviens pas jusqu'à ma mainDialog.

  6. #6
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    j'ai une fenêtre de type CFrameWnd, et je voudrais y mettre une boite de dialogue de type CDialog à l'intérieur. J'ai donc créé ma CDialog et j'en déclare une instance dans ma frame (m_pMainDialog), je lui ait mi le type Child, et dans le onCreate de ma Frame je fais:

    Code :
    m_pMainDialog = new CMainDialog(this);m_pMainDialog->Create(IDD_DIALOG1, this);m_pMainDialog->ShowWindow(SW_SHOW);

    Mon problème c'est que je n'ai pas accès à certains des contrôles présents sur ma CDialog, et en particulier, les boutons. Comme se fais-ce?
    Je crois que ce n'est pas le bon endroit où tu dois appeler ta boite de dialogue. C'est à dire pas dans le OnCreate() de la frame. (car la frame est en cours de création, il faudrait attendre que sa création soit achevé)
    Et puis ta frame, n'a-t-elle pas de vue associé?
    Si la vue existe alors affiche ta boite dans le OnInitialUpdate() de la vue.

  7. #7
    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
    Citation Envoyé par Gabrielly
    Je crois que ce n'est pas le bon endroit où tu dois appeler ta boite de dialogue. C'est à dire pas dans le OnCreate() de la frame. (car la frame est en cours de création, il faudrait attendre que sa création soit achevé)
    Et puis ta frame, n'a-t-elle pas de vue associé?
    Si la vue existe alors affiche ta boite dans le OnInitialUpdate() de la vue.
    Mhh, je crois qu'il y a quelque chose qui m'échappe. J'ai bien une classe CChildView, mais il n'y a quasiment rien dedans. Et si j'y implémente une méthode OnInitialUpdate, je ne passe jamais dedans lors de l'exécution.

    En fait, ce que j'essaie de faire, c'est d'avoir une fenêtre dans laquelle on puisse mettre des controles (boutons, edits, etc.) et que l'on puisse "resizer" à la souris. Je pensais qu'en mettant une CDialog dans une Frame ça fonctionnerait bien, mais visiblement, ce n'est pas fait pour...

Discussions similaires

  1. [MFC] CTabCtrl dans une CDialog
    Par eyghon dans le forum MFC
    Réponses: 1
    Dernier message: 29/04/2005, 19h31
  2. [MFC] CArchive dans une thread
    Par Kaori dans le forum MFC
    Réponses: 12
    Dernier message: 11/04/2005, 15h26
  3. [mfc] affichage dans une boite de dialog
    Par chronos dans le forum MFC
    Réponses: 3
    Dernier message: 14/06/2004, 15h12
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  5. [MFC] CPropertySheet dans une CFormView ???
    Par Lofwyr dans le forum MFC
    Réponses: 2
    Dernier message: 30/07/2003, 16h49

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