2010-04-05 21 views
6

Come posso inserire una GIF animata nella mia finestra di dialogo nella mia applicazione Win32 nativa?Immagine animata in Win32

Ho un indicatore di caricamento e un processo di caricamento.

Grazie :-)

risposta

5

è possibile utilizzare il Animation Control. Dovresti convertire il tuo .gif in un .avi.

+3

La domanda di follow-up è "Come si fa a convertire un .gif ad un .avi?" Includilo nella tua risposta e sarebbe perfetto. –

+0

Dal momento che Imagemagick ha fallito, tutto quello che posso offrire è ciò che google ha sollevato. (che non è male - ho cercato 'convert gif in avi') Forse qualcun altro ha una buona idea? – Fozi

0

Poiché si dispone di un periodo di tempo limitato su questo ho cercato un esempio di lavoro per animare gif su Win32 e ho trovato una bella implementazione su cplusplus.com.

Si chiama GIF View [collegamento diretto] di Juan Soulie.

6

Non sicuro se GDI + potrebbe essere considerato come nativo Win32. Nel caso in cui si può utilizzare controllare il seguente esempio: CodeProject

0

E 'abbastanza semplice da implementare un timer per cambiare ciò che viene visualizzato. È possibile impostare un blocco di testo, senza testo, con un colore di sfondo e modificare semplicemente le dimensioni. Assomiglierà ad una barra colorata espandentesi con pochissimo overhead.

3

È molto facile da usare GDIPlus per caricare una varietà di formati di immagine inclusi JPEG, GIF (animato), png e così via.

Questo codice viene illustrato come caricare rapidamente un singolo fotogramma di un'immagine in un HBITMAP: -

#include <gdiplus.h> 
#pragma comment(lib,"gdiplus.lib") 

using namespace Gdiplus; 

HBITMAP LoadImageWithGdiPlus(LPCTSTR pszPngPath) 
{ 
    Image image(pszPngPath); 
    int width = image.GetWidth(); 
    int height = image.GetHeight(); 

    BITMAPINFO bmi; 
    bmi.bmiHeader.biBitCount = 32; 
    bmi.bmiHeader.biClrImportant = 0; 
    bmi.bmiHeader.biClrUsed = 0; 
    bmi.bmiHeader.biCompression = BI_RGB; 
    bmi.bmiHeader.biHeight = height; 
    bmi.bmiHeader.biPlanes = 1; 
    bmi.bmiHeader.biSize = sizeof (bmi.bmiHeader); 
    bmi.bmiHeader.biSizeImage = 0; //calc later 
    bmi.bmiHeader.biWidth = width; 
    bmi.bmiHeader.biXPelsPerMeter = 0; 
    bmi.bmiHeader.biYPelsPerMeter = 0; 
    BYTE* pBmp = NULL; 
    HBITMAP hbm = CreateDIBSection(NULL,&bmi,DIB_RGB_COLORS,(void**)&pBmp,NULL,0); 
    HDC hdc = CreateCompatibleDC(NULL); 
    HGDIOBJ hobj = SelectObject(hdc,hbm); 

    Graphics graphics(hdc); 
    graphics.DrawImage(&image,0,0); 

    SelectObject(hdc,hobj); 
    DeleteDC(hdc); 
    return hbm; 
}