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]Votre avis, Se passer de UpdateData()


Sujet :

MFC

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut [MFC]Votre avis, Se passer de UpdateData()
    Salut, j'aimerai avoir votre avis là dessus.

    Je débute avec les MFC, et j'ai pris le reflexe suivant :

    je n'utilise jamais UpdateData();

    à là place je crée dans le header de ma class XXXDlg.h un poiteur par type de controle présent dans ma boite de dialogue.

    par exemple :

    si je n'ai que des boutons dans ma boite de dialogue avec lequel je veuille interagir. alors je crée uniquement ceci :

    puis quand je dois "parler à, ou écouter" un controle je passe systematiquement par ces pointeurs.

    par exemple pour changer l'etat de 2 boutons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ptBouton = static_cast <CButton*> (GetDlgItem(IDC_CHECK_RED));
    ptBouton->SetCheck(0);
    ptBouton = static_cast <CButton*> (GetDlgItem(IDC_CHECK_GREEN));
    ptBouton->SetCheck(0);
    Bon ok, je suis obligé de refaire pointer ptBouton des que je veux m'adresser à un autre controle, mais ca m'évite d'avoir 150000 pointeurs, et je pense que c'est toujours plus rapide qu'un UpdateData(), Parceque ce qui ne me plais pas avec UpdateData (mais peut etre que je me trompe) c'est l'idée qu'il mette à jours toutes les variables du document, et pas uniquement ce que l'on veut, donc que ca fait beaucoup de choses inutiles systematiquement, d'où mon idée de ne passer que par des pointeurs.

    que pensez vous de cette idées?
    il y a t'il des cas où en terme de performance, de rapidité, il vaut mieux utiliser UpdateData() ?

    Merci pour vos précieux conseils.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Par défaut
    Bonjour,

    Je ne suis pas très favorable à ton idée pour les raisons suivantes:

    - MFC offre une "architecture" de programmation qui peut-être dans certains cas effectue du traitement supplémentaire permettant au développeur de mettre "facilement" en oeuvre une dialog moyennant une
    perte minime de vitesse de l'application grâce à cette architecture "étudiée" pour s'adapter dans la majorité des cas.

    - Si tu veux absolument avoir que des codes utiles, alors passes toi des MFC mais tout le développement de gestion des écrans sera de ta responsabilité, et il te faudra probablement plus de temps de développement pour réaliser une application que si tu l'avais faite en te basant sur les MFC (attention, je précise que je ne suis pas un fanatique des MFC mais il faut avouer qu'elles nous retirent une épine du pied, dans certains cas il ne vaux mieu pas les utiliser si tu dois impérativement produire du code pouvant être compilé sur un compilateur autre que VC)

    - Si tu développes en équipe, les développeurs MFC s'attendent à ce que tu te conformes à cette architecture, si tu développes à ta propre sauce, les développeurs MFC risquent de ne pas pouvoir travailler aisément dans tes codes ou de ne pas pouvoir réexploiter ton travail.

    - Dans le cas de l'UpdateData, lorsque cette méthode est appelée, le système MFC appel la méthode DoDataExchange qui s'occupe soit de mettre le contenu des variables mappées vers l'écran ou soit de reprendre le contenu des contrôles vers les variables mappées. Si tu développe une classe CTaDlg qui n'utilise pas UpdateData et que moi par exemple je crée une classe CMaDlg héritée de CTaDlg, que va-t'il se passer quand je vais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_MaDlg.UpdateData(TRUE);
    Tous les contrôles devant être géré par la classe parent (CTaDlg) ne seront pas mis à jour.

    Par conséquent, mon avis est que si tu utilises MFC alors il faut que tu te conformes à l'architecture et donc mettre en oeuvre l'UpdateData et DoDataExchange, maintenant tu peux ajouter en plus tes propres codes te
    permettant de cibler un contrôle en particulier pour ne pas à avoir à mettre à jour la totalité des contrôles de l'écran si tu sais qu'il n'y a qu'un contrôle à mettre à jour.

  3. #3
    Membre expérimenté
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par défaut
    Bonjour,

    je travaille actuellement sur un "grand" projet sous Visual Studio 7 (un projet qui a demarre il y a 2 ans et avec plus de 10 developpeurs aujourd'hui), et qui utilise les MFC. Des interfaces graphiques il y en a des dizaines, et des composants des centaines.

    Et pour mettre a jour tous ces composants, on passe toujours par des pointeurs, mais pas forcement des pointeurs globaux (il suffit de faire un GetDlgItem quand on en a besoin). Le UpdateData n'est quasiment pas utilise...

    Mais ne me demandez pas pourquoi, je viens a peine de demarrer sur le projet


  4. #4
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par défaut
    J'utilise les macros DDX seulement lorsque j'utilise des controles personalisés pour des traitement spécifique (par ex un edit qui permet uniquement des saisies de chiffre).

    Ensuite j'utilise UpdateData quand je dois mettre à jour TOUS les controles en 1 fois ce qui est super rare. Ca se fait généralement 2 fois dans une boite de dialogue, à l'initialisation et à la fermeture.

Discussions similaires

  1. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 22h00
  2. Qui se sert de Together ici ? votre avis ?
    Par Matthieu Brucher dans le forum Autres
    Réponses: 28
    Dernier message: 25/08/2006, 09h44
  3. Donnez votre avis sur les articles de Developpez
    Par Anomaly dans le forum Contribuez
    Réponses: 37
    Dernier message: 29/05/2006, 21h48
  4. Réponses: 4
    Dernier message: 26/04/2006, 14h36
  5. Réponses: 4
    Dernier message: 22/05/2003, 11h15

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