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

 C++ Discussion :

Changement d'interface en ajoutant du code


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Changement d'interface en ajoutant du code
    Bonjour tout le monde.

    Voilà, je viens d'ajouter ce code à mon projet:

    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
     
    string chaine = var0;
    	char* chaine_coupe;
    	char *p = (char*)chaine.c_str();
    	CDC *dc = m_List_Column.GetDC();
    	int i;
     
     
    	for( i = 0; i < Compteur; i++)
    	{
    		chaine_coupe = strtok( p, ";\n" );
    		p=0;
    		if(!chaine_coupe) break;
    		CSize Size = dc -> GetTextExtent( chaine_coupe, strlen(chaine_coupe) );
    		m_List_Column.InsertColumn ( i, chaine_coupe, LVCFMT_LEFT, Size.cx+2, -1 );
    	}
     
    	ListView_SetExtendedListViewStyle( m_List_Column.m_hWnd ,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES );
    et depuis j'ai un soucis d'interface.
    En effet, avant d'ajouter ce code j'avais cette interface:
    http://pics.imagup.com/ano1/1275947868.JPG

    et depuis, mon interface ressemble à cela:
    http://pics.imagup.com/ano1/1275947922.JPG

    Changement incompréhensible :s.

    Ce n'est pas très important me direz vous et je le conçois mais je voudrais juste comprendre pourquoi c'est devenu comme ca.

    J'ai tenté de mettre en commentaire le code que j'avais ajouté et malgré cela, l'interface reste inchangé.

    Merci d'avance pour vos petites infos

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    A mon avis vous avez un écrasement de mémoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // essayez de remplacer
    	char *p = (char*)chaine.c_str();
    // par
            char p[64];  //c'est à dire suffisamment grand
            strcpy(p, chaine.c_str();
    // ou
            char* p = new char[ chaine.Length() + 1 ];
            strcpy(p, chaine.c_str();
    // et il faudra penser à faire
            delete p;
    // mais, si p a évolué, ça risque de poser des problèmes
    // c'est pourquoi, je préfère la déclaration d'un tableau
    Ce type de question est très à la mode ces temps-ci.
    Un pointeur contient l'adresse mémoire du début d'une zone.
    Lorsqu'on travaille sur une chaine de caractères, ou travaille sur un tableau.
    La classe string est (je crois) une fausse classe. Elle contient un mécanisme interne qui permet de faire des opérations diverses sur des chaines.
    Quant on fait S.c_str(), on renvoie un pointeur, mais si on veut travailler sur la chaine, il faut en faire une copie pour réserver de la place.
    La place utilisé par string n'a pas physiquement été allouée, à aucun moment on ne doit la libérer.

    Cordialement.

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    La classe string est (je crois) une fausse classe.
    ??
    Citation Envoyé par Pierre Dolez Voir le message
    Elle contient un mécanisme interne qui permet de faire des opérations diverses sur des chaines.
    Quant on fait S.c_str(), on renvoie un pointeur, mais si on veut travailler sur la chaine, il faut en faire une copie pour réserver de la place.
    Ce qui est vrai, c'est qu'on n'a pas le droit de modifier ce qui est retourné par c_str, et surtout pas d'en changer la taille. Dans la prochaine version du langage, on aura l'assurance que c_str retourne le pointeur interne, et on devrait pouvoir en changer le contenu (mais pas la taille) sans trop de soucis.
    Pour découper simplement une chaîne, je conseille boost::string_algo, ou pour plus évolué, des regex.
    Citation Envoyé par Pierre Dolez Voir le message
    La place utilisé par string n'a pas physiquement été allouée, à aucun moment on ne doit la libérer.
    ??
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Altal Voir le message
    Changement incompréhensible :s.
    Et si tu remodifies ton code, tu retrouve la première version ? Je suis prêt à parier que non. Tu as probablement fait une autre modif (mise à jour du compilateur, d'une bibliothèque, de l'os ???).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Invité
    Invité(e)
    Par défaut
    @JolyLoic

    Je suppose que les points d'interrogation que vous tapez veulent dire que vous ne comprenez pas. En tout cas, moi je crois avoir compris ça.
    Cela fait deux fois depuis huit jours que je lis que la prochaine version de C++ précisera l'utilisation de c_str().
    Moi, vous savez, je utilise c_str() depuis 10 ans, alors, s'il avait fallu que j'attende la prochaine version ??? ou !!!

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    Quant on fait S.c_str(), on renvoie un pointeur, mais si on veut travailler sur la chaine, il faut en faire une copie pour réserver de la place.
    Citation Envoyé par Pierre Dolez Voir le message
    Moi, vous savez, je utilise c_str() depuis 10 ans, alors, s'il avait fallu que j'attende la prochaine version ??? ou !!!
    La copie ne sera plus necessaire. Tant qu'on ne modifera pas la taille.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Oui, mais pour l'instant elle l'est.
    Ceci dit, je suis bien content, mais je ne vais certainement pas racheter un compilateur, modifier mon programme etc.
    Et actuellement il u a des gens qui se posent la question, que leur répondez-vous?

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    La copie ne sera plus necessaire. Tant qu'on ne modifera pas la taille.
    Et en pratique, aujourd'hui, il n'y a qu'une version de bibliothèque pour laquelle la copie est nécessaire (roguewave ?). Ça marche déjà sans ça avec les autres. Dans le futur, plus besoin de copies pour personne.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Pour le calcul de la taille de ta colonne, est-ce que CListCtrl::SetColumnWidth ne te simplifierait pas le travail ? Pour découper les chaines, si boost ne te convient pas tu dois pouvoir t'en sortir soit en jouant avec la STL et les std::strings, soit il me semble me souvenir que les CString ont des choses aussi, non ?
    Pour ton changement d'IHM, je ne dois pas bien y voir car la seule différence est l'affichage 'old' style windows standard (Comment appliquer le style XP aux fenêtres ?)

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Alors rebonjour à tous (et toutes).

    Tout d'abord désolé de ne répondre que mtn mais j'étais en exam toute la semaine^^. Je viens de lire toutes vos réponses et je vais tester tout ca pour voir ce qu'il en est. Je peux juste répondre à JolyLoic pour lui confirmer que effectivement, même en remodifiant mon code, je ne re tombe pas sur mon interface que j'avais avant. Mais pour autant, je n'ai rien modifié ailleurs :s.
    J'ai même crée un nouveau projet, et arrivé à l'endroit ou je dois gérer les colonnes etc... je place le code et paf mon interface change.

    Donc bon j'essai de mettre en oeuvre tout ce que vous avez dit et je vous tient au courant .

    Merci encore

    Altal

  11. #11
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    Et actuellement il u a des gens qui se posent la question, que leur répondez-vous?
    Que ce n'est pas l'idéal, que, sauf contraintes spécifiques (perfs...), j'écrirais probablement le code différemment (par exemple, avec boost::string_algo::split, comme indiqué dans mon premier message), mais qu'il est peu probable que ce soit la cause d'erreur.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. interface Qt dans du code C
    Par horkets dans le forum Qt
    Réponses: 2
    Dernier message: 28/01/2007, 11h36
  2. ajouter un code
    Par alix the webmasta dans le forum Langage
    Réponses: 3
    Dernier message: 17/10/2006, 12h08
  3. [VB.NET]evenement sur un controle ajouté par code
    Par Golzinne dans le forum Windows Forms
    Réponses: 14
    Dernier message: 01/03/2006, 22h37
  4. Comment ajouter du code a la suite ?
    Par maximenet dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 03/02/2006, 11h52
  5. Ajouter du code HTML à la volé.
    Par CynO dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/11/2005, 11h12

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