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 Visual C++ 6 Diverses questions


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Par défaut MFC Visual C++ 6 Diverses questions
    J'ai quelques questions sur les MFC avec Visual 6, si quelqu'un peut m'aider, ça serait sympa: (projet en sdi)

    - je voudrais qu'au départ de mon application, une boite de dialogue de présentation s'affiche pendant quelques secondes avant que le logiciel ne se lance. J'ai fait la boîte de dialogue et elle se lance bien au démarrage de l'application, mais il faut cliquer sur ok pour que la boite de dialogue disparaisse. Est-il possible de la faire disparaître automatiquement au bout d'un certain temps comme sur bcp de logiciels.

    -Sur le même concept, je voudrais faire un boite de dialogue permettant d'afficher un message (de type "Veuillez patienter..." ) pendant l'éxécution d'une fonction qui prend beaucoup de mémoire.

    -A la fermeture de l'application, j'ai systématiquement un plantage avec l'erreur suivante: "Debug Assertion Failed". Le debugger me dit que ça plante à l'appel du destructeur des objets dynamiques d'une de mes classes (destruction d'un tableau). Pourtant le destructeur contient une simple ligne:

    delete [] PtTableau;

    D'où peut venir l'erreur???

    - Comment faire démarrer l'application en mode maximisé?
    - Est-il possible de changer le nom de l'application en haut à gauche du logiciel? (qui est par défaut celui du projet)
    (le code donné dans la faq ne marche pas avec mon application...)

    Si vous avez la réponse à l'un de ces problèmes ou des suggestions, je suis preneur!!! Merci d'avance a++.

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 291
    Par défaut
    Pour la mémoire => extrait un exemple complet et surtout minimal, et si le simple fait de reduire ton problème à moins de 42 lignes compilables et executables ne te permet pas de voir ton problème, soumets nous (*) ces 42 lignes.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    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
    Citation Envoyé par Vlad_Oliv
    J'ai quelques questions sur les MFC avec Visual 6, si quelqu'un peut m'aider, ça serait sympa: (projet en sdi)

    - je voudrais qu'au départ de mon application, une boite de dialogue de présentation s'affiche pendant quelques secondes avant que le logiciel ne se lance. J'ai fait la boîte de dialogue et elle se lance bien au démarrage de l'application, mais il faut cliquer sur ok pour que la boite de dialogue disparaisse. Est-il possible de la faire disparaître automatiquement au bout d'un certain temps comme sur bcp de logiciels.
    ça s'appelle un splash Screen ,l'assistant de visual permet d'un inserer un automatiquement:menu projets/add to project /Components and controls
    puis Visual C++ Components et enfin Splash Screen.
    ou Faq : http://c.developpez.com/faq/vc/?page...s#splashscreen
    Citation Envoyé par Vlad_Oliv
    -Sur le même concept, je voudrais faire un boite de dialogue permettant d'afficher un message (de type "Veuillez patienter..." ) pendant l'éxécution d'une fonction qui prend beaucoup de mémoire.
    une Boite de dialogue non modale devrait faire l'affaire :
    voir faq:http://c.developpez.com/faq/vc/?page...gPostNcDestroy

    Citation Envoyé par Vlad_Oliv
    -A la fermeture de l'application, j'ai systématiquement un plantage avec l'erreur suivante: "Debug Assertion Failed". Le debugger me dit que ça plante à l'appel du destructeur des objets dynamiques d'une de mes classes (destruction d'un tableau). Pourtant le destructeur contient une simple ligne:

    delete [] PtTableau;

    D'où peut venir l'erreur???
    typique d'un débordement mémoire ,ou de mauvaise initialisation etc..
    reference toutes les allocations/desallocations sur ce pointeur et ses utilisations notemment sur la borne de fin.
    Citation Envoyé par Vlad_Oliv
    - Comment faire démarrer l'application en mode maximisé?
    voir faq:http://c.developpez.com/faq/vc/?page=CWinApp#Maximiser
    Citation Envoyé par Vlad_Oliv
    - Est-il possible de changer le nom de l'application en haut à gauche du logiciel? (qui est par défaut celui du projet)
    (le code donné dans la faq ne marche pas avec mon application...)
    si tu parles de ce post de la faq:
    http://c.developpez.com/faq/vc/?page...#ChangeAppName
    ça fonctionne trés bien chez moi et j'ai testé sur un projet SDI....

  4. #4
    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
    ça s'appelle un splash Screen ,l'assistant de visual permet d'un inserer un automatiquement:menu projets/add to project /Components and controls
    puis Visual C++ Components et enfin Splash Screen.
    Comment on procède sous VC++ 2005 ?

  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
    Citation Envoyé par Gabrielly
    Comment on procède sous VC++ 2005 ?
    salut,
    je n'ai pas trouver l'équivalent, encore un element perdu avec le passage sous 2005.

  6. #6
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Par défaut
    Merci de vos réponses, je vais voir ce que ça donne, mais a priori ca devrait bien m'avancer,

    merci beaucoup a+

    Olivier

  7. #7
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Par défaut
    Pour le splash, c'est bon, et vraiment pratique, je connaissais pas, merci.

    Par contre, j'ai toujours des problèmes pour mon destructeur. En fait j'utilise une classe tableau (que je n'ai pas écrite moi-même) pour manipuler ces tableaux, et je pense que l'erreur doit venir de là, mais, je vois vraiment pas comment la résoudre. Si quelqu'un veut s'y intéresser, ça doit pas être très compliqué, voici le code minimaliste qui plante, ramené en projet console win32:

    main.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <iostream>
    using namespace std;
    #include "CSon.h"
    #include "tableau.h"
    void main()
    {
        cout<<"Salut."<<endl;
        CSon son1;
    }
    CSon.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "tableau.h"
    class CSon
    {   
        private :
            long  int                m_liTaille;                       //taille du TabSon
            Tableau<short int>         m_psiTabSon;     //Tableau des données son
        public :
            CSon();       //Constructeur
            ~CSon();    //Destructeur
    };
    CSon.cpp:
    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
     
    #include <iostream>
    using namespace std;
    #include "CSon.h"
    #include "tableau.h"
    CSon::CSon()
    {
            m_liTaille=0; 
    }
     
    CSon::~CSon()
    {
        if (m_psiTabSon.LireAdrTab()!=NULL)
            m_psiTabSon.~Tableau();
    }
    tableau.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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
    #ifndef TABLEAU
    #define TABLEAU
     
    #include <iostream>
    #include <stdlib.h>
     
    template <class T> class Tableau
        {
        T * PtTableau;
        int Taille;
    public :
        explicit Tableau(int taille=0);
       Tableau(const T * tab,int n);
        Tableau(const Tableau<T> & t);
        ~Tableau();
        int LireTaille() const {return Taille;}
      T * LireAdrTab() {return PtTableau;}
      const T *LireAdrTab() const {return PtTableau;}
        T LireElement(int i) const;
        void ChangerElement(int i,T val);
        T & operator[](int i);
        const T & operator[](int i) const;
        void ChangerTaille(int taille);
        Tableau<T>& operator=(const Tableau<T> &t);
        };
     
     
    template <class T> inline Tableau<T>::Tableau(int taille)
    {
    Taille=taille;
    PtTableau=new T[Taille];
    }
     
    template <class T> Tableau<T>::Tableau(const T *tab,int n)
    {
    int i;
    Taille=n;
    PtTableau=new T[Taille];
    for (i=0;i<n;i++) PtTableau[i]=tab[i];
    }
     
    template <class T> Tableau<T>::Tableau(const Tableau<T> &t)
    {
    int i;
    Taille=t.Taille;
    PtTableau=new T[Taille];
    for (i=0;i<Taille;i++) PtTableau[i]=t.PtTableau[i];
    }
     
    template <class T> inline Tableau<T>::~Tableau()
    {
    delete [] PtTableau;
    }
     
    template <class T> T Tableau<T>::LireElement(int i) const
    {
    if (i<0 || i>=Taille)
      {
      std::cerr<<"Dépassement d'indice : i = "<<i;
      abort();
      }
    return PtTableau[i];
    }
     
    template <class T> void Tableau<T>::ChangerElement(int i,T val)
    {
    if (i>=0 && i<Taille) PtTableau[i]=val;
    else
      {
      std::cerr<<"Dépassement d'indice : i = "<<i;
      abort();
      }
    }
     
    template <class T> inline T &Tableau<T>::operator[](int i)
    {
    if (i<0 || i>=Taille)
      {
      std::cerr<<"Dépassement d'indice : i = "<<i;
      abort();
      }
    return PtTableau[i];
    }
     
    template <class T> inline const T &Tableau<T>::operator[](int i) const
    {
    if (i<0 || i>=Taille)
      {
      std::cerr<<"Dépassement d'indice : i = "<<i;
      abort();
      }
    return PtTableau[i];
    }
     
     
    template <class T> void Tableau<T>::ChangerTaille(int taille)
    {
    T *p;
    int i,min;
    if (taille>=0)
        {
        p=new T[taille];
        if (Taille<taille) min=Taille;
        else min=taille;
        for (i=0;i<min;i++) p[i]=PtTableau[i];
        delete [] PtTableau;
        PtTableau=p;
        Taille=taille;
        }
    }
     
    template <class T> Tableau<T> & Tableau<T>::operator=(const Tableau<T> &t)
    {
    int i;
    if (Taille!=t.Taille)
        {
        delete [] PtTableau;
        PtTableau=new T[t.Taille];
        Taille=t.Taille;
        }
    for (i=0;i<Taille;i++) PtTableau[i]=t.PtTableau[i];
    return *this;
    }
    #endif
    Merci de votre aide,
    a+
    Olivier
    La prochaine fois pense à mettre la balise code, Merci Farscape

  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
    salut,
    j'ai survolé rapidement...
    mais si j'ai bien compris tu as écris pour gérer un tableau dynamique pour un élément T .
    la question qui tue: pourquoi ne pas utiliser un vector ou un Carray ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class CSon
    {   
        private :
         // ne sert plus...  long  int                m_liTaille;   taille du TabSon
            vector<short int>    m_psiTabSon;     //Tableau des données son
        public :
            CSon();       //Constructeur
            ~CSon();    //Destructeur
    };

  9. #9
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Par défaut
    Heu, parce que j'ai jamais vraiment entendu parler de ces vector et carray. Ca marche sous Visual 6?

    Et surtout parce que la class Tableau me permet d'utiliser pas mal de fonction de manipulation extrêment pratiques dans le reste du programme. Et disons que vu l'avancement du projet, c'est trop tard pour changer, même si je pense que ça aurait peut-être été mieux.

    Sinon le problème est résolu pour le destructeur, en fait la classe son ne contient aucun attribut dynamique, puisque le tableau qui y est déclaré est un objet statique, donc pas besoin d'appeller le destructeur de la classe tableau dans le destructeur de la classe son, le programme à sa fermeture va directement appeler le destructeur de la classe tableau lui-même. J'avais donc un double appel et plantage.

    Mais bon, le problème est réglé. donc c'est cool merci,

    Olivier

    PS: désolé de pas avoir mis la balise code, je connais pas trop ce forum, j'y penserais la prochaine fois.

  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
    salut,
    c'est une lacune que tu devrais combler,
    un bon programmeur c++ se doit de connaitre les collections de la STL ,
    de même qu'un programmeur MFC se doit de connaitre aussi les collections proposées par les MFC.
    dans les deux cas les fonctions que tu a écrites sont disponibles pour un vector ou un CArray...

  11. #11
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Par défaut
    Dans ce cas, j'essaierais de me pencher la dessus. Mais pour ce projet, je devais de toute façon utiliser une classe tableau. Merci de l'info en tout cas.

  12. #12
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Par défaut
    Autre petit problème, j'ai cherché partout dans les FAQ sans rien trouver à ce sujet. Existe-t-il des boîtes de dialogues prédéfinies pour afficher des messages d'erreurs simple, ou dois-je fabriquer moi-même une boite de dialogue pour chaque type d'erreur comises par l'utilisateur.

    Exemple: L'utilisateur peut cliquer sur Outil/Insertion pour insérer un son dans un autre, mais si les sons ne sont pas du même type (Mono/Stéréo ou 8bits/16bits) je dois afficher un message d'erreur du style, "Attention, types de fichiers incompatbles, mono/stéréo", l'utilisateur clique sur ok et rien ne se passe.

    Mais j'ai beaucoup de messages d'erreurs de ce type a prévoir, donc je fais 15000 boites de dialogues, ou existe-t-il des fonctions prédéfinies pour gérer ça?

    Merci, a+
    Olivier.

    PS: Au passage, félicitation pour ce forum et ce site, on y trouve une très grandes quantités d'informations très utiles, à tous les niveaux!
    Chapeau!

  13. #13
    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
    voir AfxMessageBox dans MSDN.

  14. #14
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Par défaut
    Merci

Discussions similaires

  1. Réponses: 18
    Dernier message: 04/04/2006, 14h31
  2. [MFC] [Visual.NET] Question sur l'impression
    Par LapinGarou dans le forum MFC
    Réponses: 8
    Dernier message: 31/03/2006, 08h51
  3. C++ diverses questions concernant directX
    Par TERRIBLE dans le forum DirectX
    Réponses: 5
    Dernier message: 05/10/2005, 23h09
  4. [MFC] Visual .NEY, MFC71, windows 2000/XP
    Par romeo9423 dans le forum MFC
    Réponses: 1
    Dernier message: 31/08/2005, 19h54
  5. Diverse question ...
    Par Dims dans le forum Développement
    Réponses: 11
    Dernier message: 13/01/2004, 15h29

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