ImageCtrl.2 - Un Control Integrado para Pictures

Presentación

En la entrega anterior pudimos apreciar como cargar JPG's y GIF's ademas de BMP's también un ImageCtrl para redimensionar imágenes, grabar y hasta dibujar sobre el.

ImgCtrl1.jpg
Formulario MFC que usa el control


Pues ahora juntamos todo esto en un control integrado para Pictures pues no solo carga y muestra Pictures, ahora permite ponerle BORDE, redimensionar el Control en tiempo de ejecución, el famoso STRECH e incluso cargar JPG's desde la sección RESOURCES.

Ojo pestaña y ceja, aqui no se ha usado AppWizard.

Como usar en un programa MFC

El control mlStuffsPk.2 tiene integrado este hermoso mlFileDialog que es una versión mejorada para tecnologías NT de Windows, el cual es mas vistoso ahora puedes usarlo solo necesitas una linea de código, la verdad que COOL.

ImgCtrl2.jpg
Seleccionando la imagen con FileDialog


ImgCtrl3.jpg
Para guardar una imagen es necesario establecer el nombre del archivo.


Como grabar imágenes utilizando el control

Es posible grabar en formato BMP solo escribe el nombre del archivo sobre el cuadro de texto, pulsa sobre Grabar BMP y obtendrás un Bitmap que podrás apreciar el directorio actual, si has usado mlFileDialog en el directorio actual tendrás algo como esto:

ImgCtrl4.jpg
Imagen guardada por la aplicación.


CImageCtrl.2 y mlStuffsPk.2

Carga Bitmaps de 16, 256 y hasta 24 bits, por cierto tiene una rutina que te permitira grabar las imagenes en archivos, el formato de salida es de 24 Bits.

Ahora cargar JPG desde archivo y RESOURCE GIF's no necesitas complicarte con pesados BMP's cuando quieras darle un LOOK espectacular a tus programas.

Codigo Fuente

implementar en tu proyecto las funciones IMPORT de la DLL con ayuda de una LIB para mlStuffsPk.DLL inserta en stdafx.h estas lineas.

Code: Seleccionar todo
  1.  //------------[ START COPY HERE ]------------------------------

  2.   extern "C" {

  3.     HBITMAP  mlLoadPictureByRes( UINT nIDRes, LPCTSTR lpType );

  4.     HBITMAP  mlLoadPictureByFile( LPCTSTR lpFileName );

  5.     HBITMAP  mlLoadBitmap( LPCTSTR lpFileName );

  6.     SIZE     mlGetBitmapSize( HBITMAP hBitmap );

  7.     HICON    mlLoadIcon( LPCTSTR lpFileName );

  8.     HFONT    mlFont( LPCTSTR lpFontName , int nSize=8, bool bBold=false );

  9.     LPCTSTR  mlFileDialog( HWND hWndOwn, LPCTSTR lpsFilter=NULL,

  10.                                         LPCSTR lpsTitle=NULL );

  11.   };

  12.   //------------[ END COPY HERE ]------------------------------



Despues de hacer ese trabajo solo te queda usar el control, puedes hacer un sub-classing haciendo que tu STATIC sea ImageCtrl con el ClassWizard, y si eres mas tigre, solo usa SubclassDlgItem( ... )

Por que usamos extern "C" ?

En honor a la verdad no se que es extern "C", yo lo use porque cuando exportas e importas funciones de tipo extern "C", las exports tienen el decorado _mlFuncionCool que si fueran normales serian de tipo ?mlFuncionCOOL@YAHPLPTIMESTRUCTYAHP4 lo cual es estupidamente grande e innecesario pues de todas maneras los argumetnos a las funciones pasan al STACK y no necesitan reserva, es tonto reservar STACK para argumentos que se apilan en tiempo de ejecucióon. salvo mejor parecer.

Como cargar JPG, GIF, BMP desde RESOURCE.


Code: Seleccionar todo
  1.  void CDlgMLImgCtrl::OnLoadFromRes( )

  2.  {

  3.     // Que fácil verdad.

  4.     //

  5.     // "IMAGES" es el TAG de RESOURCE en tu proyecto

  6.     // deberás cambiarlo por el que pusiste tú.

  7.     //

  8.  

  9.     mImageCtrl.LoadFromRes( IMG_WINXP, "IMAGES" );

  10.  };



Cargar imágenes desde el disco


Code: Seleccionar todo
  1.  void CDlgMLImgCtrl::OnLoadFromFile( )

  2.  {

  3.     //

  4.     // mlFileDialog hace el trabajo de ubicar

  5.     // tu fichero de Imagen, luego solo llamas

  6.     // a LoadFromFile para completar la misión

  7.     // los filtros aqui no usan '|' usan ''

  8.     //

  9.  

  10.     CString strFileName = mlFileDialog( m_hWnd,

  11.                 "Best Images (*.jpg)*.jpg"

  12.                 "Html Images (*.gif)*.gif"

  13.                 "Bitmaps (*.bmp)*.bmp"

  14.                 "Dibujos (*.dib)*.dib" );

  15.  

  16.     if( !strFileName.IsEmpty( ) )

  17.         mImageCtrl.LoadFromFile( strFileName );

  18.  

  19.  };



Notas de Interés

  • Hay un articulo aqui mismo para los Curiosos de JPG, se llama LoadJPG revisenlo.
  • Tambien un CtrlImage.1 para BMP's unicamente sin DLL's
  • Necesito ayuda pues necesito exportar funciones de tipo _mlLockSocket@4, _mlLockSocket@2@4 esto para rutinas ASM porfa es urgente. y si alguien sabe como hacer que sus imports funcionen en VC++ avisen !!!

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

Archivos Adjuntos

  • Source.zip 31,19 KiB
    Código fuente del proyecto de ejemplo.
  • Release_demo.ZIP 45,98 KiB
    Proyecto de ejemplo compilado (exe).
  • Doc.zip 7,63 KiB
    Documentación de las clases y funciones

Otros Artículos en esta sección

  • Shell para Simulación
    Shell para Simulación es una herramienta donde el usuario de manera interactiva puede modelar sistemas reales y definir sus características. La herramienta está orientada a la simulación de sistemas dinámicos y estocásticos que cambian de manera discreta.
    Por: nazg, 2006-03-18
  • HACHA (AXE) Cortador de Archivos
    Es una versión del cortador de archivos Hacha que incluye el código fuente, puedes utilizar el cortador para enviar archivos en medios pequeños.
    Por: Lizardo, 2004-03-14
  • Una clase para el manejo del Registro
    Ésta clase hace fácil el manejo de las entradas del Registro de Windows.
    Por: carlos.antollini, 2008-02-13
¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:
foro de Visual C++ »