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 :

Dialog modeless de type CFormView


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Par défaut [Résolu]Dialog modeless de type CFormView
    Bonjour

    J'ai bien cherché sur le forum ( et pas que celui la...) et je ne comprend pas.
    J'essaye de faire une chose simple : à partir d'un boutton, faire apparaitre une boite de dialogue non-modale mais de la forme CFormView.

    J'ai crée dans les ressources une boite de dialogue du genre IDD_PROPPAGE_MEDIUM.
    Puis avec l'assistant de classe, je définis sa classe : CIfo de type CFormView
    Je renomme l'IDD de la boite : IDD_IFO ( pour faire plus simple )

    Je rajoute l'include de Ifo.h dans mon programme de base ( BaseView.h )

    Et c'est là que tout se corse :

    J'ai essayé Create puis ShowWindow et j'ai un probleme d'assertion ce qui me semble normal vu la façon dont j'ai écrit mon Create ( de façon très hasardeuse...)

    Je vous met le code :

    BaseView.h
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    #include "Ifo.h"
    #pragma once
     
     
    class CBaseView : public CFormView
    {
    protected: // création à partir de la sérialisation uniquement
        CBaseView();
        DECLARE_DYNCREATE(CBaseView)
     
    public:
        enum{ IDD = IDD_BASE_FORM };
     
    // Attributs
    public:
        CBaseDoc* GetDocument() const;
        CWnd * m_ifownd ;
     
     
    // Opérations
    public:
     
    // Substitutions
    public:
        virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // Prise en charge de DDX/DDV
        virtual void OnInitialUpdate(); // premier appel après la construction
     
    // Implémentation
    public:
        virtual ~CBaseView();
    #ifdef _DEBUG
        virtual void AssertValid() const;
        virtual void Dump(CDumpContext& dc) const;
    #endif
     
    protected:
     
    // Fonctions générées de la table des messages
    protected:
        DECLARE_MESSAGE_MAP()
    public:
        afx_msg void OnBnClickedButton1();
    };
     
    #ifndef _DEBUG  // version de débogage dans BaseView.cpp
    inline CBaseDoc* CBaseView::GetDocument() const
       { return reinterpret_cast<CBaseDoc*>(m_pDocument); }
    #endif
    BaseView.cpp ( seulement les parties que j'ai touché )

    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
     
    void CBaseView::OnInitialUpdate()
    {
        CFormView::OnInitialUpdate();
        GetParentFrame()->RecalcLayout();
        ResizeParentToFit();
        m_ifownd = new CWnd ;
        m_ifownd->CreateEx(WS_EX_NOPARENTNOTIFY   , //J'ai essayé plusieurs arguments sans succes.
          _T("STATIC"),
          _T("Hi"),
          WS_DISABLED   ,
          CRect(0,0,100,100),this, IDD_IFO);
     
    ...
     
    void CBaseView::OnBnClickedButton1()
    {
        // TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle
        m_ifownd->ShowWindow(TRUE) ;
     
     
    }
    Ifo.h

    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
     
    #pragma once
    // Mode formulaire CIfo
     
    class CIfo : public CFormView
    {
        DECLARE_DYNCREATE(CIfo)
     
    protected:
        CIfo();           // constructeur protégé utilisé par la création dynamique
        virtual ~CIfo();
     
    public:
        enum { IDD = IDD_IFO };
    #ifdef _DEBUG
        virtual void AssertValid() const;
    #ifndef _WIN32_WCE
        virtual void Dump(CDumpContext& dc) const;
    #endif
    #endif
     
    protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // Prise en charge de DDX/DDV
     
        DECLARE_MESSAGE_MAP()
    };
    le Ifo.cpp est celui généré par l'assistant

    Précision : je suis sous Visual Studio 2005 Standard et Winxp projet SDI avec Doc/Vue. Je veux faire une boite de dialog de type CFormView car ça à l'air plus facil pour dessiner des graphs dedans ( grace au CDC ).

    J'ai réussi jusque là à avancer sans poser de questions ( Merci Farscape pour votre tuto sur les MFC ), mais là j'ai besoin d'aide.

    Je vous remercie d'avoir prit le temps de me lire et je vous serai très reconnaissant si vous pouviez me répondre ou me guider.
    Je m'excuse pour mon orthographe pas très au point.

    Bonne journée.
    la prochaine fois pense à mettre la balise de code Merci,Farscape

  2. #2
    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, et bienvenue sur le forum ,

    bien si tu dois faire apparaitre une view CFormView etc ...
    le modéle SDI n'est pas adapté au sujet...
    certainement parce que tu t'es basé sur mon tuto qui ne traite que le SDI,
    (le deuxieme volet est en cours d'ecriture).

    donc il te faut une application MDI ,
    apres pour ouvrir plusieurs view voir la faq:
    http://c.developpez.com/faq/vc/?page...ltiDocTemplate
    et ce post aussi:
    http://c.developpez.com/faq/vc/?page...SelectDocOnApp

    tu ne devrais pas avoir de problemes pour passer du modéle SDI au MDI,
    il faut changer les CSingleDocTemplate en CMultiDocTemplate.
    Générer avec l'aide de l'assistant une classe CChildFrame heritée de CMDIChildWnd.
    dans la classe CMainFrame remplacer CFrameWnd par CMDIFrameWnd.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Par défaut
    Désolé pour les balises.

    Problème : je travail sur un projet déja existant en SDI ( le bout de code donné me permet de me faire la main car j'été sous borland avant ). Donc j'ai pas de fléxibilité à ce niveau là.

    En gros, le projet :

    1) Dessiner des Histogrammes dans le fenetre principale. (Dans le projet c'est une CView et pas CFormView mais un clique sur un boutton se code plus vite qu'un test de coordonnées et donc me permet d'avancer plus vite aux étapes suivantes)

    2)Ouvrir une fenetre suite à un clique sur une partie de cet histogramme.

    3)Dessiner un autre histogramme dans cette fenetre popup.

    Grace à votre tuto, j'ai réussi à faire le 1 et une partie du 2 ( la gestion du clique ). J'ai essayé de faire le 2 avec CDialog en modal : ca marche mais apres pour dessiner dedans c'est pas top :/ ( insérer une Bitmap ect... c'est assez moche et bourrin je trouve ). D'où l'idée d'utiliser la classe CFormView qui me semble plus adaptée.

    Est-ce que je me trompe dans mon raisonnement?

    Je vous remercie d'avoir répondu si vite et j'attend avec impatience votre 2eme partie du tuto ^^

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Par défaut
    Ca y est j'ai résolu mon problème tout seul ( en fouillant le forum et en lisant la MSDN ) :

    J'ai utilisé une CDialog non modale et rajouté l'évenement OnPaint().

    Ca marche parfaitement.

    Là je buche sur la communication entre les deux mais je pense trouver tout ça sur le forum.

    Merci à vous d'avoir répondu

    Question : A quand la suite de votre "bible" MFC ?

    Bonne journée et merci pour l'accueil

  5. #5
    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,
    c'est une solution, voir faq pour la destruction de la fenetre .
    http://c.developpez.com/faq/vc/?page...gPostNcDestroy
    ce post devrait te convenir :
    http://www.developpez.net/forums/sho...92#post1002092

    le tuto ça sera pour la rentrée ,avant je pars en vacances

Discussions similaires

  1. Liste de type de fichier dans Save Dialog
    Par gillou026 dans le forum Débuter
    Réponses: 2
    Dernier message: 11/12/2013, 09h31
  2. Récupération d'items de type ListView dans un dialog
    Par Landiiv dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 07/07/2012, 18h20
  3. modeless Dialog bug
    Par ____22 dans le forum wxPython
    Réponses: 1
    Dernier message: 04/09/2010, 21h32
  4. modeless dialog
    Par hellboy dans le forum MFC
    Réponses: 3
    Dernier message: 01/05/2006, 19h16
  5. Réponses: 3
    Dernier message: 24/08/2004, 11h49

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