begin process at 2012 05 29 12:19:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

MFC

 > 

[MFC Visual 6] timer, debug assertion et autres questions


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[MFC Visual 6] timer, debug assertion et autres questions

samedi 23 décembre 2006 à 02:26:22 | [MFC Visual 6] timer, debug assertion et autres questions

vladii

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? Faut-il utiliser des timer?

-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)

Si vous avez la réponse à l'un de ces problèmes ou des suggestions, je suis preneur!!! Merci d'avance a++.
samedi 23 décembre 2006 à 11:13:23 | Re : [MFC Visual 6] timer, debug assertion et autres questions

louis14

-pour la boite de dialogue au départ, il y a un composant intégré dasn VC++ (splashscreen) que tu peux ajouter à ton projet et qui résoud ton problème.
-pour le veuillez patienter, tu peux soit passer par les tâches, soit de temps en temps utilisez une boucle pour pomper les messages. de toute façon il faut d'abord appeler le DoModal pour ta boite de dialogue ( adjoint y une progressbar pendant que tu y es).
-j'ai souvent constaté cette erreur à la destruction de la classe, il faut bien déclaré le pointeur null à la création et si on détruit le tableeau le remettre à Null, la destruction ne doit se faire que si tableau n'est pas null et celà devrait rentré dans l'ordre, il doit y avoir plusieurs appel de destructiojn de tableau, ou bien ton tableau n'est pas créé.
- pour le maximisé, il faut aller dasn initinstance de la classe Application de ton projet, il y a le pMainWnd, après sa création fait un ShowWindow( SW_MAXIMISE)
-pour changer le nom de ton application, tu peux aller dasn les String ressources, il y a Afx_app_title et changer le paramètre. si ton application est basée sur une boite de dialogue, il suffit de la visualiser dasn les ressources et de changer son nom, sinon dans Initdialog de ta boite, tu peux faire SetwindowText ( titre).


louis14
samedi 23 décembre 2006 à 16:39:01 | Re : [MFC Visual 6] timer, debug assertion et autres questions

yann_lo_san

Salut,
si SDI, dans doc, surcharger SetTitle
TONDOC::SetTitle(LPCTSTR title)
{
   CDocument::SetTitle(lpszTitle);
}

// pour un splash de ton cru (dlg template)

dans initInstance tu la lances :
CSplashDlg dlg;
dlg.m_nMaxTime = 7; // un temps
dlg.m_sLabel = _T("Chargement...")); // un label chargement
dlg.DoModal();

// le splashDlg.h
class CSplashDlg : public CDialog
{
   CString  m_sLabel;   // Pour label
   CEdit  m_CtrlLabel;  // Le controle label d'info
   UINT_PTR m_nTimer;   // Le timer de progression
   DWORD  m_nMaxTime;  // 10 par defaut (2,5 s) 20 = 5 sec

   // ect...
};

// le cpp
// important :
void CSplashDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 DDX_Text(pDX, IDC_LABEL_SPLASH, m_sLabel);
 DDX_Control(pDX, IDC_LABEL_SPLASH, m_CtrlLabel);
}

BOOL CSplashDlg::OnInitDialog()
{
   // Lance le timer
   m_nTimer = SetTimer(m_nTimer, 200, NULL);
   return TRUE;
}

// exemple pour un timer
void CSplashDlg::OnTimer(UINT nIDEvent)
{   
   static DWORD dwTime = 0;

    if( dwTime > m_nMaxTime )
    {
        KillTimer(m_nTimer);
        dwTime = 0;
        EndDialog(IDOK);
    }
    else
    {
        CString temp;
        temp.Format("%s %d %%", m_sLabel, (dwTime*100)/m_nMaxTime);
        m_CtrlLabel.SetWindowText((LPCTSTR)temp);
        dwTime++;
    }

    CDialog::OnTimer(nIDEvent);
}

Ensuite quant tu détruis, toujours faire if( ptr != NULL ) delete...

A plus...

samedi 23 décembre 2006 à 20:18:42 | Re : [MFC Visual 6] timer, debug assertion et autres questions

vladii

Merci de vos réponses c'est cool, je vais tester tout ça et je vous tiens au courant,

merci beaucoup,

Olivier

mardi 26 décembre 2006 à 15:39:19 | Re : [MFC Visual 6] timer, debug assertion et autres questions

vladii

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:
#include <iostream>
using namespace std;
#include "CSon.h"
#include "tableau.h"
void main()
{
    cout<<"Salut."<<endl;
    CSon son1;
}


CSon.h:
#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:
#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:
#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
mardi 26 décembre 2006 à 19:08:59 | Re : [MFC Visual 6] timer, debug assertion et autres questions

vladii

C'est bon en fait, problème résolu, j'avais pas à appeler le destructeur de tableau dans le destructeur de CSon.
C'est ok :)

mardi 26 décembre 2006 à 20:00:37 | Re : [MFC Visual 6] timer, debug assertion et autres questions

yann_lo_san

CSon.cpp:
#include <iostream>
using namespace std;
#include "CSon.h"
#include "tableau.h" // pas la peine de réinclure tableau ici
mardi 26 décembre 2006 à 23:36:07 | Re : [MFC Visual 6] timer, debug assertion et autres questions

vladii

Merci, j'avais pas vu.




Cette discussion est classée dans : timer, application, visual, mfc, dialogue


Répondre à ce message

Sujets en rapport avec ce message

Probleme tout bete avec visual c++ 6. et mfc [ par killeroms ] Bonjour a tous,j'ai cree un projet avec visual c++ 6 et en utilisant la mfc !j'ai ajouter un activex pour le besoin de mon application ( au cas ou ça Visual C++ 7 : Passage paramètre à une application MFC [ par lcamps ] Bonjour,J'aimerai exécuter une application MFC en passant des paramètres du genre :AppToto.exe Param1.lst Param2.lstComment faire pour récupérer ces p visual c++ : MFC : placement d'une boite de dialogue [ par hao21 ] Bonjour;j'ai une boite de dialogue que je souhaiterai placer en bas de fenetre. Lorsque je change la variable Y dans les propriétés de ma boite, quand Probleme en MFC [ par vangeurmasker ] J'ai un probleme dans mon application MFC. Je travaille avec VC++ 6. J'ai créé une application MFC, dialog based.J'ai crée une deuxiemme boite de dial MFC visual c++ : comment recupérer les coordonnées da la souris [ par hao21 ] Bonjour.j'aurai aimé savoir comment faire pour récupérer les coordonnées de la souris sur la fenetre quand on clique, pour que lorsque l'on clique sur Comment réliser une installation pour vos applications MFC [ par thr_dreamer_57 ] salut tout le monde et merci de votre attention Mon problème c'est que j'ai réaliser une petite application MFC (dont je vous ferai part prochai debug Visual - chaine & toString [ par magic_Nono ] cous l'avez sans doutes remarqué, mais avec Visual, quand on débug, (avec ou sans MFC)et qu'on survole une variable, ou qu'on la met dans la watch, i processus boite de dialogue MFC [ par lisandru ] Bonjour, alors voila mon problème:  - je lance une boite de dialogue modale à partir d'une autre fenetre, et j'execute alors une scripte de copie qui MFC ou ActiveX ou ...?!! [ par oulali ] Bonjour, J'ai développé une application en Visual C++ qui utilise les MFC et des OCX. Elle tourne super bien sur toutes les versions de Windows en fr TIMER avec MFC [ par pcrafale ] Bonjour à tous,Je n'arrive pas à programmer un timer sur un programme utilisant les MFC.Tous les codes expliquants les timer n'accepte pas les MFC.Sur


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales