choupinou | OK. Voici le code de toute ma classe CFEATDoc, comme ça si le problème vient d'ailleurs, vous pourrez peut-être le trouver.
Code :
- // F.E.A.TDoc.cpp : implémentation de la classe CFEATDoc
- //
- #include "stdafx.h"
- #include "F.E.A.T.h"
- #include "Interface.h"
- #include "Dialog_Options.h"
- #include "F.E.A.TDoc.h"
- #include ".\f.e.a.tdoc.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #endif
- #include <malloc.h>
- class CInterface;
- extern CInterface *Interface;
- // CFEATDoc
- IMPLEMENT_DYNCREATE(CFEATDoc, CDocument)
- BEGIN_MESSAGE_MAP(CFEATDoc, CDocument)
- END_MESSAGE_MAP()
- // construction ou destruction de CFEATDoc
- CFEATDoc::CFEATDoc()
- {
- // TODO : ajoutez ici le code d'une construction unique
- }
- CFEATDoc::~CFEATDoc()
- {
- }
- BOOL CFEATDoc::OnNewDocument()
- {
- if (!CDocument::OnNewDocument())
- return FALSE;
- // TODO : ajoutez ici le code de réinitialisation
- // (les documents SDI réutiliseront ce document)
- CDialog_Options dlg;
- int OK;
- char Caption_Edit[30];
- //Charge les options
- OK=dlg.Chargement_Options("[Durée du test]",&Interface->Options.DUREE_def_HH,&Interface->Options.DUREE_def_MM,&Interface->Options.DUREE_def_SS);
- if(OK!=0)
- {
- dlg.Chargement_Options("[Titre]",&Interface->Options.TITRE_def);
- }
- //Interface->OnInitialUpdate();
- //Initialise le texte des boutons
- LoadString(GetModuleHandle(NULL),TXT_Edit,Caption_Edit,30);
- Interface->m_Ctrl_Furet_1.SetWindowText(Caption_Edit);
- Interface->m_Ctrl_Furet_2.SetWindowText(Caption_Edit);
- Interface->m_Ctrl_Furet_3.SetWindowText(Caption_Edit);
- Interface->m_Ctrl_Furet_4.SetWindowText(Caption_Edit);
- Interface->Nb_File_Genere=0; //Aucun fichier généré pour l'instant
- Interface->Select_Range=1;
- Interface->Test.Test_Termine=FALSE; //Le test n'est pas terminé (puisqu'il n'est pas commencé)
- //Initialiser les valeurs des furets
- Interface->Init_Furet(&Interface->Furet_1);
- Interface->Init_Furet(&Interface->Furet_2);
- Interface->Init_Furet(&Interface->Furet_3);
- Interface->Init_Furet(&Interface->Furet_4);
- //Initialise les images de gauche
- Interface->Definir_Image(&Interface->m_Image_Furet_1,IDI_Image_Info);
- Interface->Definir_Image(&Interface->m_Image_Furet_2,IDI_Image_Info);
- Interface->Definir_Image(&Interface->m_Image_Furet_3,IDI_Image_Info);
- Interface->Definir_Image(&Interface->m_Image_Furet_4,IDI_Image_Info);
- return TRUE;
- }
- // sérialisation de CFEATDoc
- void CFEATDoc::Serialize(CArchive& ar)
- {
- if (ar.IsStoring())
- {
- Interface->m_Ctrl_Commentaire_Furet_1.GetWindowText(Interface->Furet_1.Caracteristiques.Commentaire); //Sauvegarde du commentaire
- Enregistrer_Furets(ar, &Interface->Furet_1);
- Interface->m_Ctrl_Commentaire_Furet_2.GetWindowText(Interface->Furet_2.Caracteristiques.Commentaire); //Sauvegarde du commentaire
- Enregistrer_Furets(ar, &Interface->Furet_2);
- Interface->m_Ctrl_Commentaire_Furet_3.GetWindowText(Interface->Furet_3.Caracteristiques.Commentaire); //Sauvegarde du commentaire
- Enregistrer_Furets(ar, &Interface->Furet_3);
- Interface->m_Ctrl_Commentaire_Furet_4.GetWindowText(Interface->Furet_4.Caracteristiques.Commentaire); //Sauvegarde du commentaire
- Enregistrer_Furets(ar, &Interface->Furet_4);
- Enregistrer_Caracteristiques_Test(ar, &Interface->Test);
- }
- else
- {
- Charger_Furets(ar, &Interface->Furet_1);
- Charger_Furets(ar, &Interface->Furet_2);
- Charger_Furets(ar, &Interface->Furet_3);
- Charger_Furets(ar, &Interface->Furet_4);
- Charger_Caracteristiques_Test(ar, &Interface->Test);
- }
- }
- // diagnostics pour CFEATDoc
- #ifdef _DEBUG
- void CFEATDoc::AssertValid() const
- {
- CDocument::AssertValid();
- }
- void CFEATDoc::Dump(CDumpContext& dc) const
- {
- CDocument::Dump(dc);
- }
- #endif //_DEBUG
- // commandes pour CFEATDoc
- void CFEATDoc::Enregistrer_Furets(CArchive& ar, FURET *furet)
- {
- int i;
- ar << furet->num_element;
- for(i=0 ; i<furet->num_element ; i++)
- {
- ar << furet->Donnees[i].Nb_Retch;
- ar << furet->Donnees[i].Nb_Vomit;
- ar << furet->Donnees[i].Erreur;
- ar << furet->Donnees[i].Temps_Debut_Phase;
- ar << furet->Donnees[i].Temps_Fin_Phase;
- }
- ar << (long)furet->Caracteristiques.Debut_Chrono;
- ar << furet->Caracteristiques.Poids;
- ar.WriteString(furet->Caracteristiques.Dose);
- ar.WriteString("\n" );
- ar.WriteString(furet->Caracteristiques.Identification);
- ar.WriteString("\n" );
- // Enregistrer_CString_Type(ar, furet->Caracteristiques.Commentaire);
- //ar.WriteString(furet->Caracteristiques.Commentaire);
- //ar.WriteString("\n" );
- }
- void CFEATDoc::Charger_Furets(CArchive& ar, FURET *furet)
- {
- int i;
- ar >> furet->num_element;
- furet->Donnees=(DONNEES_FURET *)malloc(sizeof(DONNEES_FURET));
- for(i=0 ; i<furet->num_element ; i++)
- {
- ar >> furet->Donnees[i].Nb_Retch;
- ar >> furet->Donnees[i].Nb_Vomit;
- ar >> furet->Donnees[i].Erreur;
- ar >> furet->Donnees[i].Temps_Debut_Phase;
- ar >> furet->Donnees[i].Temps_Fin_Phase;
- furet->Donnees=(DONNEES_FURET *)realloc(furet->Donnees, _msize(furet->Donnees)+sizeof(DONNEES_FURET));
- }
- ar >> (long)furet->Caracteristiques.Debut_Chrono;
- ar >> furet->Caracteristiques.Poids;
- ar.ReadString(furet->Caracteristiques.Dose);
- ar.ReadString(furet->Caracteristiques.Identification);
- // Charger_CString_Type(ar, &furet->Caracteristiques.Commentaire);
- // ar.ReadString(furet->Caracteristiques.Commentaire);
- }
- void CFEATDoc::Enregistrer_Caracteristiques_Test(CArchive& ar, CARACTERISTIQUE_TEST* test)
- {
- //Il faut valider les expressions avant de les sauvegarder
- char buffer[9];
- //Enregistre la duree du test
- ar << test->Duree_Test;
- //Enregistre la date
- _strdate(buffer);
- test->Date.Format(" %.2s/%.2s/%.2s",&buffer[3],&buffer[0],&buffer[6]);
- ar.WriteString(test->Date);
- ar.WriteString("\n" );
- //Enregistrer_CString_Type(ar, test->Date);
- Interface->m_Ctrl_Session.GetWindowText(test->Session);
- ar.WriteString(test->Session);
- ar.WriteString("\n" );
- //Enregistrer_CString_Type(ar, test->Session);
- Interface->m_Ctrl_Study.GetWindowText(test->Study);
- ar.WriteString(test->Study);
- ar.WriteString("\n" );
- //Enregistrer_CString_Type(ar, test->Study);
- Interface->m_Ctrl_Technicien.GetWindowText(test->Technician);
- ar.WriteString(test->Technician);
- ar.WriteString("\n" );
- //Enregistrer_CString_Type(ar, test->Technician);
- //Interface->m_Ctrl_Titre.GetWindowText(test->Titre);
- //ar.WriteString(test->Titre);
- //ar.WriteString("\n" );
- //Enregistrer_CString_Type(ar, test->Titre);
- Interface->m_Ctrl_Titre.GetWindowText(test->Titre);
- ar << test->Titre.GetLength();
- ar.Write(test->Titre, test->Titre.GetLength());
- }
- void CFEATDoc::Charger_Caracteristiques_Test(CArchive& ar, CARACTERISTIQUE_TEST* test)
- {
- //Charger_CString_Type(ar, &test->Date);
- //ar >> test->Duree_Test;
- //Charger_CString_Type(ar, &test->Session);
- //Charger_CString_Type(ar, &test->Study);
- //Charger_CString_Type(ar, &test->Technician);
- //Charger_CString_Type(ar, &test->Titre);
- int taille;
- ar >> test->Duree_Test;
- ar.ReadString((CString& )test->Date);
- ar.ReadString((CString& )test->Session);
- ar.ReadString((CString& )test->Study);
- ar.ReadString((CString& )test->Technician);
- // ar.ReadString(test->Titre); //pb: charge première ligne uniquement
- ar >> taille;
- ar.Read(&test->Titre, taille);
- }
- void CFEATDoc::Enregistrer_CString_Type(CArchive& ar, CString texte)
- {
- int i;
- int taille;
- taille=texte.GetLength();
- ar << taille;
- for(i=0 ; i<=taille ; i++)
- ar << texte.GetAt(i);
- }
- void CFEATDoc::Charger_CString_Type(CArchive& ar, CString *texte)
- {
- int i;
- int taille;
- char car;
- ar >> taille;
- *texte="";
- for(i=0 ; i<=taille ; i++)
- {
- ar >> car;
- *texte+=car;
- }
- }
|
Comme vous pouvez le constater, j'ai essayé avec différentes méthodes (fonctions fournies par Visual, réécrire des fonctions d'enregistrement...). Mais ça plante quand même. |