CString AcuArchive::Reload(void) { fReloadFlag = true; // tell everybody that cached data is invalid DeleteEntries(); if (LoadContents() != 0) { return L"Reload failed."; } return ""; }
TMultiFontTextGadget :: ~TMultiFontTextGadget ( ) { DeleteEntries ( ) ; }
void TMultiFontTextGadget :: SetText ( char * text ) { register char * p = text ; LOGFONT CurrentFont, NewFont ; COLORREF OldFore, OldBack, Fore, Back ; int size, total_size = 0 ; // Effacer les entrées de texte précédentes DeleteEntries ( ) ; if ( ! text ) goto Return ; // Récupérer les paramètres de la police du gadget, ainsi que les couleurs du texte { GetFont ( ). GetObject ( CurrentFont ) ; NewFont = CurrentFont ; OldBack = 0xFFFFFFFFL ; OldFore = 0xFFFFFFFFL ; Fore = OldFore ; Back = OldBack ; } // Traiter tous les formats while ( * p ) { // Récupérer le prochain élément de texte p = GetTextElement ( p, size, CurrentFont, NewFont, OldFore, OldBack, Fore, Back ) ; // Allouer un nouvel élément dans la liste chaînée TTextEntry * te = new TTextEntry ; // Initialiser la structure te -> Font = new TFont ( & NewFont ) ; te -> ForegroundColor = Fore ; te -> BackgroundColor = Back ; te -> TextLength = size ; te -> Text = new char [size+1] ; te -> Next = 0 ; strncpy ( te -> Text, p, size ) ; te -> Text [size] = 0 ; p += size ; // L'ajouter dans la liste chaînée if ( TextEntries ) { LastTextEntry -> Next = te ; LastTextEntry = te ; } else TextEntries = LastTextEntry = te ; } Return : // Supprimer l'ancien texte if ( Text ) delete [] Text ; // Et le reconstituer avec les nouveaux éléments if ( total_size ) { Text = p = new char [ total_size + 1 ] ; for ( TTextEntry * te = TextEntries ; te ; te = te -> Next ) { strcpy ( p, te -> Text ) ; p += te -> TextLength + 1 ; } } else Text = 0 ; // Indiquer qu'il y a eu un changement de taille Window -> GadgetChangedSize ( * this ) ; }