2010-04-05 22 views
6

¿Cómo puedo poner un GIF animado en mi cuadro de diálogo en mi aplicación nativa Win32?Imagen animada en Win32

Tengo un indicador de carga y un proceso de carga.

Gracias :-)

Respuesta

5

podría utilizar el Animation Control. Sin embargo, tendrías que convertir tu .gif en .avi.

+3

La pregunta de seguimiento es "¿Cómo convertir un archivo .gif a un .avi?" Incluye eso en tu respuesta y sería perfecto. –

+0

Dado que Imagemagick falló, todo lo que puedo ofrecer es lo que trajo a colación Google. (lo cual no está mal, busqué 'convert gif to avi') ¿Quizás alguien más tenga una buena idea? – Fozi

0

Dado que tiene un marco de tiempo ajustado en este busqué un ejemplo funcional para animar gifs en win32 y encontré una buena implementación en cplusplus.com.

Se llama GIF View [enlace directo] por Juan Soulie.

6

No estoy seguro de si GDI + podría considerarse como win32 nativo. En caso de que pueda usarlo, consulte el siguiente ejemplo: CodeProject

0

Es bastante simple implementar un temporizador para cambiar lo que se muestra. Puede configurar un bloque de texto, sin texto, con un color de fondo y simplemente cambiar el tamaño. Se verá como una barra de color en expansión con muy poca sobrecarga.

3

Es muy fácil de usar GdiPlus para cargar una variedad de formatos de imagen incluyendo jpeg, gif (animado), png y más.

Este código muestra cómo cargar rápidamente un solo fotograma de una imagen en 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; 
} 
Cuestiones relacionadas