Usted no esta registrado, haga click aqui para registrarse!
 Inicio   Artículos   Recursos   Foros 
 

Iniciar sesión

¿No estas registrado?
Registrate en Latindevelopers.com!

 

















Como  cargar JPG, GIF, BMP en dialogos MFC

Enviado por: MicroLogic©Software

 

Main Screen
Main Screen

Presentacion

Los pocos amantes de Visual C, Watcom C++, Dev C++, pero no C++ Builder, mientras van adquiriendo conocimientos y desarrollandose, a medio camino surge un problema denominado : "El Trance JPG", pues a diferencia de C++ Builder o Delphi VC++ no tiene controles que hagan el trabajo de cargar JPG, GIF, o cualquier otro formato comprimido de imagenes.

Para esos sufridos amantes de C++ les presentamos un DLL con todo ese trabajo hecho sin mas que usar, ademas de ser portable para cualquier compilador Win32 para C++, aqui un ejemplo de como usar dicha DLL.

mlStuffsPk.dll

esta primera version carga JPG, GIF, DIB, PCX, BMP ademas tiene integrado un práctico OpenDialog, mejoradito a comparacion de CFileDialog, que es bastante rústico.

Como usarla

Pues bien aqui algo de source code mostrando este caso.

* Cargar un JPG, GIF

void CDlgMLImgCtrl::OnLoadJpg( )
{
    CString     csFileName = mlOpenDialog( m_hWnd, 
                "Jpg   (*.jpg)\0"
                "*.jpg\0"
                "Jpeg  (*.jpeg)\0"
                "*.jpeg\0"
                "All Formats\0"
                "*.*\0" );

    if( ! csFileName.IsEmpty( ) )
    {
        // Puedo Asignar Directamente...
        // mCtrlImage.SetBitmap( mlLoadJPG( csFileName ) ); 
        // Ahora se puede usar.

        // O Puedo Salvarlo en un CBitmap
        // para poder manipularlo a mi antojo
        // claro que no me gusta, pues te complicas...

        HBITMAP    hBmp = mlLoadJPG( csFileName ); // "Image.jpg";
        mBmpImage.Attach( hBmp );

        mCtrlImage.SetBitmap( mBmpImage );
    }
};


* Ahora para Bitmaps.

void CDlgMLImgCtrl::OnLoadBmp( )
{
    CString     csFileName =     mlOpenDialog( m_hWnd, 
                    "Bitmaps (*.bmp)\0"
                    "*.BMP\0"
                    "All Formats\0"
                    "*.*\0" );

    if( ! csFileName.IsEmpty( ) )
    {
        // Salvamos el HBITMAP que retorna en uno temporal.
        // la DLL se encarga de que HBITMAP no se destruya
        // asi evitamos tener que estar salvando HBITMAP
        // cada vez que llamemos a 'mlLoadBitmap( ... )'

        HBITMAP    hBmp = mlLoadBitmap( csFileName );
        mCtrlImage.SetBitmap( hBmp ); // Ahora se puede usar.

        // si deseas usar le HBITMAP salvalo en un CBitmap
        // no temporal, sino en la Clase.
    }
};

* Antes : es necesario entrar a Project, Settings, y colocal mlStuffsPk.lib para el enlace con las funciones de la DLL, luego en el Cpp de ceclara los siguientes prototipos de funciones externas.

//const char * WINAPI mlOpenDialog( HWND hWndOwn, const char* lpsFilter, 
//const char *lpsTitle="MicroLogic - Search File" );
extern  LPCSTR  WINAPI  mlOpenDialog( HWND hWndOwn, 
            LPCSTR lpsFilter , LPCSTR lpsTitle="MicroLogic - Search File" );
extern  HBITMAP WINAPI  mlLoadBitmap( const char *  );
extern  HBITMAP WINAPI  mlLoadJPG( const char * );

// No olvides que LPCSTR, LPCTSTR son typedef
// de nuestro viejo amigo (const char *)
// por ello hacer ? es igual a :
//
//        LPCTSTR = (const char *)
//        LPCSTR  = (const char *)
//        LPSTR   = (char *)    
//

Con eso basta. por cierto antes de olvidarlo, este sample te muestra tambien como usar mlOpenDialog( ... ) el que conccias por este que esta bestial.

NOTA : sobre XP, NT, muestra este cuadro, pero sobre Win9x, WinMe es el conocido y mugre dialogo.

Demo Screen
Demo Screen

 

Notas de Interés

Debo Aclarar que no hay truco, en verdad carga un JPG, pero para masticarlo mejor lo devuelve en un HBITMAP, de modo que se facilita las cosas, asi ya no tendremos que pelearnos con el HDC, HRGN, BITMAPINFOHEADER, BITMAPDIBSECTION, entre otras complicadas rutinas, pues la DLL lo hace todo. y para demostrar que no miento aqui una imagen mostrando el dialogo y el STATIC en tiempo de diseño. eso aclara que no estoy usando ningún control prediseñado

Proximamente otro ejemplo un CtrlImage, que tenga Strech, Load, Save, Clear y demas bondades de otros controles decentes.

Demo Screen
Demo Screen

Now : the first trouble is the compatibilty with others sources, the linker send a error like ( missing "stdafx.h" ), well really stdafx.h is not important only may choose other file, other file like "globals.h" or "general.h", here put the global specifications, you can see something like I sayd in the example of this source code. download now.

Acotaciones


MicroLogic©Software - Recomendations : Los programas que se otorgan pueden ser libremente copiados, cualquier consulta o duda con los programa o sobre C++ Builder, haganozla saber a nuestro correo micrologic_software@yahoo.es

MicroLogic©Software - Trabaja como parte integrante de F.I.L.I.C.C - (Fundacion para la Investigación de Lenguajes Informáticos y Ciencias de la Computación) Todo el Codigo es revisado y evaluado por F.I.L.I.C.C. Buscalos en la red en http://www.filicc.pe.kz

Descargas

Acerca del Author

Nombre de usuario: MicroLogic©Software
Blog/URL:
Fecha de envío: 2006-03-02
Ultima Actualización:
Visualizaciones: 12455
Nedstat Basic - Web site estadisticas gratuito
El contador para sitios web particulares