[MFC Visual 6] timer, debug assertion et autres questions
cs_vladii
Messages postés5Date d'inscriptionsamedi 23 décembre 2006StatutMembreDernière intervention26 décembre 2006
-
23 déc. 2006 à 02:26
cs_vladii
Messages postés5Date d'inscriptionsamedi 23 décembre 2006StatutMembreDernière intervention26 décembre 2006
-
26 déc. 2006 à 23:36
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++.
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 23 déc. 2006 à 11:13
-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).
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 23 déc. 2006 à 16:39
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);
}
cs_vladii
Messages postés5Date d'inscriptionsamedi 23 décembre 2006StatutMembreDernière intervention26 décembre 2006 26 déc. 2006 à 15:39
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
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