Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo implementar aplicaciones de animación a través de VC

Cómo implementar aplicaciones de animación a través de VC

Inserte microanimación en el programa VC

---- Lo siguiente usa la clase CImageList para guardar varias imágenes y usa la función Dibujar para reproducirlas dentro de un cierto intervalo de tiempo para formar un efecto similar a GIF. animación. Este método puede reproducir animaciones en el área del cliente, la barra de herramientas y la barra de estado de Windows. También se proporciona aquí un método para utilizar la función SetIcon para reproducir animaciones en la barra de título de la ventana.

---- (1) Principio

----

Hay una clase CImageList en VC, que puede usar la lista de imágenes como una imagen. Gestión de listas, las imágenes en la lista de imágenes son del mismo tamaño, el índice comienza desde 0 y se puede hacer referencia a cada imagen individualmente. Microsoft

La API proporciona una serie de funciones

Microsoft

La API proporciona una serie de funciones que puede utilizar para crear y destruir listas de imágenes, mostrar imágenes , Agregue y elimine imágenes, reemplace, combine y arrastre imágenes.

---- La clase CImageList proporciona un control de lista de imágenes general de Windows. La siguiente es una breve descripción de las funciones utilizadas en este artículo:

BOOL Create( int cx, int cy, UINT nFlags, int nInitial, intnGrow

----); Esta función se utiliza para crear una lista de imágenes. cx, cy

son el ancho y alto de cada imagen; nFlags es el tipo de lista de imágenes, cuyo valor solo puede contener un valor ILC_COLOR. nInicial es el número de imágenes contenidas inicialmente en la lista de imágenes; nGrow es el número de imágenes que aumenta dinámicamente cada vez que es necesario cambiar el número de imágenes.

BOOL Draw( CDC* pdc, int nImage, POINT pt, UINT nStyle);

---- Esta función se utiliza para mostrar imágenes. pdc es un puntero al contexto del dispositivo de destino; nImage es el índice de la imagen que se mostrará; pt es la posición de la imagen que se mostrará; nStyle es el estilo de visualización de la imagen; consulte la ayuda en línea para obtener más detalles.

HICON ExtractIcon( int nImage ); Utilice esta función para obtener un identificador de una función: int Add( HICON hIcon );

---- (2) Programación e implementación

----

El primero es el establecimiento de recursos gráficos. Utilice el editor de recursos en VC6.0 para crear varios gráficos, IDI_ICON1, IDI_ICON2, IDI_ICON3... Al editar el icono, seleccione Personalizado y establezca el tamaño del icono en 64X32. Dado que los distintos componentes de Windows no son exactamente iguales, sus métodos de implementación tampoco son exactamente los mismos. La siguiente es una introducción a los métodos para mostrar animaciones en diferentes posiciones de la ventana.

---- 1. Dibuje la animación en el área del cliente de la clase Ver

---- Agregue las siguientes variables en el archivo de clase de definición:

PUNTO pt1; //Posición de visualización de la imagen int m_Play; //Se mostrará el índice de la imagen void CreateImageList ();

function CImageList m_ImageList1; // objeto de lista de imágenes int m_ImageNumber; // número total de imágenes en la lista de imágenes primero inicializa pt1.m_Play, m_ImageNumber:CImageView::CImageView(){//TODO: agregar código de construcción herept1.x =1; pt1.y =1; m_Play=0; m_ImageNumber=0; }CreateImageList() se implementa de la siguiente manera: void CImageView::CreateImageList(){m_ ImageList1.Create (64, 32, ILC_COLOR, 5, 2); :: LoadIcon(AfxGetResource-Handle(), MAKEINTRESOURCE(IDI_ICON1)); m_ImageList1.Add(hIcon); m_ImageNumber = :: LoadIcon(AfxGetResource-Handle(), MAKEINTRESOURCE(IDI_ICON2)); m_ImageNumber; hIcon = :: LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON3)); m_ImageList1.Add(hIcon);/ Agregue todos los recursos que se reproducirán a la lista de imágenes. } Configure el temporizador y cree la lista de imágenes en la función OnCreate: int CImageView::OnCreate(LPCREATESTRUCTlpCreateStruct){if (CView::OnCreate(lpCreateStruct) == -1)return -1; // TODO: agregue creación especial aquí Código CreateImageList(); SetTimer(1, 500, NULL); return 0; Responder al mensaje ON_TIMER para mostrar la animación: void CImageView::OnTimer(UINT nIDEvent) { // TODO: Agregar código de manejo de mensajes aquí y/o llamar a defaultCDC * pDC=GetDC(); if (m_Play gt; m_ImageNumber) m_Play=0; m_ ImageList1.Draw(pDC, m_Play, pt1, ILD_TRANSPARENT); >

---- Finalmente, no olvide agregar código en la función OnDestroy para detener el temporizador cuando se cierra la ventana.

---- 2. Muestra animación en la barra de estado

---- Dado que la barra de estado también es una ventana, también puedes mostrar animación en ella.

En la clase CMainFrame puede ver el siguiente código:

protected:// miembros integrados de la barra de controlCStatusBar m_wndStatusBar;

---- Entonces, para mostrar la animación en la barra de estado Su código de programación debe agregarse en la clase CMainFrame. Primero, cree un archivo de recursos y una clase de lista de imágenes. Los métodos y códigos específicos se utilizan para dibujar la parte de animación en el área del cliente de la clase Ver, que no se describirá aquí. La siguiente es la función de respuesta de ON_TIMER:

void CMainFrame::OnTimer(UINT nIDEvent){// TODO: agregue aquí el código del controlador de mensajes y/o llame a defaultif(m_Play gt; m_ImageNumber){// TODO : Agregue su código de controlador de mensajes aquí y/o llame a defaultif(m_Play gt;m_ImageNumber)._ImageNumber)m_Play=0;//Si la imagen es la última, muestre la primera imagen CDC *pDC=this-gt;m_wndStatusBar.GetDC () ; ASSERT(pDC!=NULL); pt1.x=1; pt1.y =1; m_ImageList1.Draw(pDC, m_Play, pt1, ILD_TRANSPARENT); ; }

---- El código anterior reproducirá la animación en la esquina superior izquierda de la barra de estado.

---- 3. Reproducir animación en la barra de herramientas

---- Dado que la naturaleza de la barra de herramientas es similar a la barra de estado, el método para reproducir la animación también es similar Lo siguiente está fuera de la función de respuesta ON_TIMER:

void CMainFrame::OnTimer(UINT nIDEvent){// TODO: agregue su código de controlador de mensajes aquí y/o llame a defaultif(m_Play gt; m_ImageNumber)m_Play. =0;/ /Si la imagen es la última, muestra la primera imagen CRect rect; CDC *pDC; pDC=this- gt; m_wndToolBar.GetDC(); GetClientRect(amp; rect); //Obtiene el área válida de visualización pt1.x =rect.right -64; //Establece la posición de visualización más a la derecha pt1.y=1; ReleaseDC(ppDC ); m_Play ; CFrameWnd:: OnTimer(nIDEvent); }

---- El código anterior reproducirá la animación en la esquina superior derecha de la barra de herramientas.

Pero si observa con atención, la posición de la animación no está cerca del lado derecho de la ventana. Esto se debe a que la ventana de la barra de herramientas tiene un borde. Utilice el siguiente método para mover la pantalla al lado derecho de la ventana.

pDC=GetDC () ; //Obtener el puntero del dispositivo de dibujo de CMainFrame ASSERT(pDC!=NULL); this- gt; GetClientRect(amp GetClientRect(amp; rect); pt1.x =rect. right-64; pt1.y =rect.top 3; m_ImageList1.Draw(pDC, m_Play, pt1, ILD_TRANSPARENT); ReleaseDC(pDC); /p>

----. 4. Anima el icono

---- Hay una función en la clase CWnd:

HICON SetIcon(HICON hIcon, BOOL bBigIcon); puede cambiar el ícono de la ventana, por lo que puede usar esta función para cambiar continuamente el ícono y hacer que el ícono se mueva. El efecto es como GetRight.GetRight.OnTimer. Agregue el siguiente código en la función OnTimer. (m_ImageList1.ExtractIcon (m_Play), FALSE);

--- - Puede hacer que los íconos se muevan. Por supuesto, para que el programa funcione mejor, será mejor que reconstruyas un conjunto de recursos de íconos.