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] MDI, CMultiDocTemplate & cie.


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    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 290
    Billets dans le blog
    2
    Par défaut [MFC] MDI, CMultiDocTemplate & cie.
    Bonjour à tous,

    je dois créer une fenêtre (frame) dans une appli de type vaguement MDI et, d'une part, c'est un de mes gros points faible, et d'autre part, cette appli est des plus complexes. J'aurais donc besoin de quelques éclaircissements, c'est pourquoi je me tourne vers vous.

    1/ Le CMultiDocTemplate. Le principe me semble pratique, mais le problème c'est que la fenêtre que je dois créer ne comporte pas de doc. Vous savez, pour créer un CMultiDocTemplate, il faut lui passer le nom des classes du doc, de la frame et de la view. Bon ben moi j'ai pas de doc, est-ce que cela peut poser problème? Comment fonctionne le mécanisme du CMultiDocTemplate? Ce que je ne comprends pas, c'est comment sont créés les views (où et comment doit-on faire le Create, etc.)?

    2/ La MDI. J'ai donc créé une frame et une view. Mais dans ma frame, je n'ai pas de methode d'initialisation (OnInitDialog, OnInitialUpdate ou ce genre de chose). Comment se fais-ce? Dois-je la créer "à la main"?

    3/ Le code. Pour l'instant, en tatonnant, j'ai réussi à compiler, mais j'ai un gros plantage sur le create de ma view. Je l'ai mis dans le Create de ma frame, mais j'ai la très désagréable impression que je fais fausse route. Pour info, voici le code qui pose problème:
    int CMyFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    [...]
    CRect rect;
    GetClientRect(rect);
    m_pView->CreateEx(0, "toto", "titi", WS_VISIBLE|WS_CHILD, rect, this, IDD_MY_VIEW, NULL);

    m_pView->ShowWindow(SW_SHOW); //Ca plante ici, avec m_pView->m_hWnd = 0xfeeefeee
    [...]
    Une idée?

  2. #2
    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
    Je crois bien que tu fasses fausse route.
    Les MFC t'offre déjà une autoroute bien asphalté et toi tu veux emprunter un sentier.
    Si ta fenêtre est sans document alors je ne vois aucun mal d'en créer un et de le connecter dans le CMultiDocTemplate.
    Tu crées simplement une classe document sans fonctionnalité apparente mais par pure formalité pour permettre aux MFC de créer correctement ta fenêtre.

  3. #3
    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
    En ce qui concerne l'initialisation, tu as le message WM_CREATE de ta frame si tu as à créer dynamiquement des objets (contrôles, etc) et tu as la méthode virtuelle OnInitialUpdate() de ta vue qui est le meilleur candidat où tu puisses initialiser tes données.

    Les MFC font appel à toutes une serie d'appels de fonctions dans le CMultiDocTemplate lors de la création jusqu'à l'affiche d'une fenêtre MDI
    En écrivant un code comme le tien tu ne manqueras pas de court circuiter les appels.

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    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 290
    Billets dans le blog
    2
    Par défaut
    Ok, merci Gabrielly

    apparamment, il n'est pas possible créer un MutiDocTemplate sans Doc. J'ai testé différentes approches, mais j'obtiens toujours des gros plantages hideux.

    Pour le reste, je commence à comprendre

  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,
    tu peux utiliser la classe CDoc dans la déclaration de ton document template
    sans pour autant a avoir à gérer le document par la suite...

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    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 290
    Billets dans le blog
    2
    Par défaut
    oui, c'est la solution qui m'a semblé la meilleure, en effet.
    Bon, je vais mettre résolu alors

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    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 290
    Billets dans le blog
    2
    Par défaut
    Erf, j'ai un petit souci:
    J'ai créé mon DocTemplate ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    m_pTotoDocTemplate = new CMultiDocTemplate(
            IDR_TOTO, //icone
            RUNTIME_CLASS(CDocument), //document dont je ne me sert pas
            RUNTIME_CLASS(CTotoFrame), // ma frame qui contient ma view
            RUNTIME_CLASS(CTotoView) );  // ma view AddDocTemplate(m_pTotoDocTemplate );
    Et ce qu'il se passe, c'est que ma frame est bien affichée, avec l'icone et tout, mais l'interieur de la frame, qui devrait afficher ma view, n'affiche rien du tout (le rect n'est pas rafraîchi, donc il m'affiche ce qu'il y a derrière la frame, et quand je déplace la frame, il ne rafraichi pas l'intérieur).

    Vous savez d'où ça peut venir?

  8. #8
    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
    quelle est la classe de base de CTotoView ?

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    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 290
    Billets dans le blog
    2
    Par défaut
    C'est une cdxCDynamicFormView (une classe récupérée sur codeproject qui hérite de CFormView)

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    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 290
    Billets dans le blog
    2
    Par défaut
    C'est étrange, le constructeur de CTotoView n'est jamais appelé. Y aurait-il un souci avec le IMPLEMENT_DYNCREATE() ?

  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
    montre la ligne IMPLEMENT_DYNCREATE

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/05/2005, 17h43
  2. [MFC] - MDI : CDialogBar resize....
    Par Alice9 dans le forum MFC
    Réponses: 5
    Dernier message: 18/02/2005, 17h12
  3. Réponses: 12
    Dernier message: 15/02/2005, 15h34
  4. Réponses: 3
    Dernier message: 09/02/2005, 16h43
  5. Réponses: 12
    Dernier message: 02/02/2005, 16h52

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