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 :

Création dynamique de vues (RUNTIME_CLASS)


Sujet :

MFC

  1. #1
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut Création dynamique de vues (RUNTIME_CLASS)
    Bonjour à tous,

    Étant en environnement MDI, j'utilise la classe CMultiDocTemplate pour ouvrir mes documents/vues. Le constructeur de cette classe prend plusieurs paramètres dont la classe de la vue à ouvrir sous forme de CRuntimeClass*. Jusque là, rien d'extraordinaire.

    Donc à chaque fois que je veux ouvrir une nouvelle vue, je dois donc utiliser la macro RUNTIME_CLASS avec le nom de ma classe de vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RUNTIME_CLASS(CMaVue)
    J'ai centralisé l'ouverture de mes vues dans une méthode qui accepte en paramètre un CRuntimeClass*, issu de l'utilisation de la macro RUNTIME_CLASS. Ça marche très bien, mais à chaque fois que je veux utiliser ma méthode (de très nombreuses fois car j'ai plein de vues différentes) je suis obligé d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaMethodeQuiOuvreUneVue(RUNTIME_CLASS(CMaVue), ...)
    Or moi, je préfèrerais avoir à écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaMethodeQuiOuvreUneVue("CMaVue", ...)
    Pour cela, il faudrait que je trouve le moyen d'obtenir mon pointeur CRuntimeClass* à partir du nom de la classe sous forme de chaîne de caractères. Et c'est ça que je n'arrive pas à faire.

    J'ai essayé d'utiliser la méthode CRuntimeClass::FromName, mais elle me renvoie systématiquement un pointeur à NULL...

    Quelqu'un aurait-il une piste ?


    NB 1 : Mon problème n'est pas bloquant puisque ça marche très bien en appelant RUNTIME_CLASS à chaque fois. C'est juste que je ne comprends pas pourquoi je ne pourrais pas intégrer l'appel à cette macro dans ma méthode qui gère les vues.

    NB 2 : Je précise que j'ai pensé à faire une macro pour remplacer ma méthode, mais ce n'est pas possible car celle-ci a plusieurs surcharges avec des paramètres optionnels à chaque fois...


    Merci de votre aide !

  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,
    tu as utilisé la macro DECLARE_SERIAL dans ta classe ?

  3. #3
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Toutes mes classes de vues sont créées avec DECLARE_DYNCREATE (elles ont été créées avec l'assistant de Studio)...

  4. #4
    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
    remplace par DECLARE_SERIAL pour une classe pour voir ...

  5. #5
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Tu as raison, Farscape. En utilisant DECLARE_SERIAL et IMPLEMENT_SERIAL en lieu et place de DECLARE_DYNCREATE et IMPLEMENT_DYNCREATE, la méthode CRuntimeClass::FromName fonctionne bien.

    Mais il faudrait que je modifie toutes mes classes de vues... Au final, je préfère encore utiliser RUNTIME_CLASS à chaque fois.

    N'y a-t-il pas un autre moyen ?

  6. #6
    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
    non,
    mais tu peux remplacer dans tous les sources très facilement (dès fois un peu trop ) en 1 seule fois avec VC 2008...

  7. #7
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Certes, certes...
    Par contre, je ne comprends pas bien l'utilité du 3ème paramètre de IMPLEMENT_SERIAL, wSchema. Quelle valeur devrais-je lui donner si je choisissais cette solution ?

  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
    c'est le numéro de version si tu utilises la serialization de la classe ,
    tu peux donc mettre 0 (version 0)...

  9. #9
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Ben non... Je n'utiliserai pas la sérialisation de mes classes, à part pour cette fonctionnalité là. Donc je peux mettre 0 à chaque fois, dans toutes mes classes ?

  10. #10
    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
    ben oui

  11. #11
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Ok, merci bien Farscape !

    Question subsidiaire : pourquoi l'assistant de création de classes de vues met-il systématiquement DECLARE_DYNCREATE alors qu'on a aussi la possibilité d'utiliser DECLARE_SERIAL ?

  12. #12
    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
    DECLARE_SERIAL fait tout mais est utilisé pour sérialiser les classes ,ce qui n'est pas le cas d'une classe fenêtre par défaut...
    l'utilisation DECLARE_SERIAL reste un choix de l'utilisateur.

  13. #13
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Ok, merci beaucoup pour ton aide Farscape.
    Je viens de mettre le système en place et ça marche très bien !

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

Discussions similaires

  1. [Plugin] Création d'une vue dynamiquement
    Par The Bonze dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 15/06/2004, 13h23
  2. [D7] Création dynamique de Form
    Par jer64 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/08/2003, 12h20
  3. [Rave Report] problème de création dynamique
    Par Nivux dans le forum Rave
    Réponses: 2
    Dernier message: 24/05/2003, 00h07
  4. TWebBrowser et création dynamique
    Par BakaOnigiri dans le forum Web & réseau
    Réponses: 2
    Dernier message: 01/09/2002, 10h53
  5. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36

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