Newsgroup: it.comp.programmare.win32
Titolo: Inserire una Gif animata in una finestra

Ciao a tutti!
sto programmando in Visual C++  e ho la necessità di far apparire una
finestrella durante tutta un'elaborazione (cosa che può richiedere diversi
secondi). Io vorrei che questa finestra visualizzasse una gif animata che
rappresenti meglio l'attesa (non so .. come quando si copiano dei file da
una directory all'altra in windows.. che appare l'immagine dei fogli che
volano da una cartella all'altra...).
La finestra l'ho creata, il mio problema è inserire una gif dentro....
COME faccio???
Ciao e Grazie
Antonio

 wrote in message
news:9832c9$596$1...@serv1.iunet.it...

Non puoi importare una GIF animata...Visual C++ non lo contempla! L'unica
soluzione è, se hai una tua GIF personale, trasformarla in un AVI e gestirla
attraverso il controllo di animazione avente classe CAnimateCtrl. E' davvero
facile! Comunque, Visual C++ ha diverse animazioni già pronte (le classiche
del s.o.) che fanno al tuo caso!
Sergio

 del s.o.) che fanno al tuo caso!
Grazie Sergio
ho già trovato un programmino per trasformare i gif in AVI. Ho provato ad
usare la Classe CAnimateCtrl seguendo le indicazioni della guida, ma non mi
visualizza niente (cioè solo un rettangolo bianco.)
CHe vuol dire?? tu come hai fatto?
Ciao e grazie
Antonio

Io invece ti suggerisco di utilizzare un array di bitmap o icone (se č solo
per 32x32), e utilizzare un timer.
Scrivi il codice cosě
    //definizione della classe
        protected:
            CArray<CBitmap> m_arrbmp;
            int m_i;
    //inizializzazione della dialog
        //...
        CBitmap bmp;
        bmp.LoadBitmap(IDBMP1);
        m_arrbmp.add(bmp);
        bmp.LoadBitmap(IDBMP2);
        m_arrbmp.add(bmp);
        bmp.LoadBitmap(IDBMP3);
        m_arrbmp.add(bmp);
        m_i = 0;
        SetTimer(0x0100, 10);
    //OnTimer
        if(m_i < 3){
            m_static.SetBitmap(m_arrbmp[m_i++];
        }else{
            m_i = 0;
        }

per 32x32), e utilizzare un timer.
Ciao,
ho letto la tua risposta: mi potresti spiegare gentilmente il perché ?
Anch'io dovrei fare una cosa simile (e avevo appunto pensato ad un
AVI) e mi hai fatto venire qualche dubbio...
Forse il controllo AVI richiede più risorse (io comunque programmo
Win32 senza MFC) ?
Grazie e ciao !
Stefano "HappyMan"
IABLA Sezione Lago Maggiore (NO)
Foto salseri/e & I.A.B.L.A. Ring
http://happyman.n3.net


Questo il procedimento da utilizzare:
1) nella dialog crei un controllo di animazione e gli assegni le proprietà
desiderate (trasparenza, no     autoplay, ecc.);
2) importi tramite VC resources editor un file AVI e gli assegni un ID, p.e.
ID_AVI1;
3) nella funzione con cui vuoi far partire l'animazione, ad esempio il click
del tasto OK, scrivi il seguente codice:
                        m_wndFilmato.Load(IDA_AVI1); // questo serve a
caricare in memoria la risorsa AVI
                        m_wndFilmato.Play(1, -1, 0); // il primo parametro
indica il frame nr. 1 del file AVI, il secondo indica il nr. finale del
frame del file AVI (-1 indica il frame finale se non sai di quanti frame è
composto il tuo AVI, il terzo parametro indica l'autoplay (0 no autoplay, -1
viceversa);
4) inserisci una ::Sleep(100) per esempio per consentire di vedere il
filmato, altrimenti sarebbe troppo veloce l'esecuzione
5) ricordati di eseguire un m_wndFilmato.Close(); per evitare lo spreco di
risorse del s.o. (questo quando hai completato il filmato)
La soluzione proposta da Silvano Talotti (da me mai provata) è sicuramente
più elegante della mia se vuoi costruirti completamente
l'animazione...questo ti comporta alla "costruzione" de vari frame e
sicuramente spreca meno risorse rispetto ad un AVi (di solito di + grandi
dimensioni).
A te la scelta
Sergio

 risorse del s.o. (questo quando hai completato il filmato)
Grazie Sergio.
Mi funziona!!!  ho fatto + o meno come mi hai detto e mi funziona... l'unica
differenza č che io, non potendo crearmi una risorsa (per motivi che non ti
sto a spiegare) ho specificato direttamente il nome del file .Avi.
Comunque mi funziona.
Grazie tante
Ciao
Antonio


Sono contento che ci sia riuscito, ma quale č il tuo problema con la
risorsa? Vediamo di risolvere anche quello!
Sergio Mola

Beh, certamente. Allora:
    I. Ciò che hai detto è esatto.
    II. Per visualizzare una semplice animazione in una dialog, ti sembra
apropriato
        utilizzare un controllo AVI? A me pare uno spreco.
    III. L'idea di utilizzare un array e una funzione ciclica è la più
apropriata per il
         fatto che in quel momento si scrive sul disco e quindi la lettura
di uno stream
         avi sarebbe solo un intralcio.
    IV. Dimensione dell'AVI rispetto al formato bmp e icona.

Ah, scusa mi sono dimenticato il codice per API:
HBITMAP arrbmp[3];
LRESULT WindowProc(HWND hWnd, ...){
    int i = 0;
    //...
        //...
        WM_INITDIALOG:
            HINSTANCE hInst = (HINSTANCE) GetWindowLong(hWnd,
GWL_HINSTANCE);
            arrbmp[0] = LoadBitmap(hInst, MAKEINTRESOURCE(IDBMP1));
            arrbmp[1] = LoadBitmap(hInst, MAKEINTRESOURCE(IDBMP2));
            arrbmp[2] = LoadBitmap(hInst, MAKEINTRESOURCE(IDBMP3));
            HWND hShow = GetDlgItem(IDSHOW);
            //...
            SetTimer(hWnd, 0x0100, 10, NULL);
            break;
        WM_TIMER:
            if(i < 3){
                SendMessage(hShow, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
(HANDLE) arrbmp[i++]);
            }else{
                i = 0;
            }
            break;
        //...
        return 0;
}

 risorsa? Vediamo di risolvere anche quello!
Il problema non è un vero e proprio problema, nel senso che per
l'applicazione che sto creando, ho la necessità di creare dinamicamente gli
oggetti. Nella fattispecie, ho tutta una serie di classi che mi sono creato
(Edit, bottoni, controlli data .... ecc...) tra cui anche la classe che
gestisce le animazioni (derivata + o meno direttamente da CAnimatCtrl).
Quindi non posso di fatto utilizzare le risorse per costruirmi i vari
oggetti, in quanto li carico dinamicamente a seconda delle esigenze (in
pratica metto in un file XML i controlli che voglio caricare con tutte le
loro cxarateristiche..posizione, dimensioni...ecc..)
Spero di essermi spiegato....
Comunque ti ringrazio. Se hai bisogno di aiuto non hai che da chedermi.
Ciao
    Antonio

 wrote in message
news:9832c9$596$1...@serv1.iunet.it...


 wrote in message
news:984163527.14544.0...@news.demon.co.uk...
