Ejemplo StockTicker: muestra información Web en un control ATL

Actualización: noviembre 2007

El ejemplo StockTicker descarga información bursátil del Web y la muestra en un control ATL que desplaza los datos de derecha a izquierda. El control actualiza los datos a intervalos definidos por el usuario.

StockTicker contiene cuatro partes:

  • Componente ATL compartido (stockquotes).

  • Control ATL (stocktickeratl).

  • DLL de extensión de ISAPI (stocksourcemfc).

  • Aplicación contenedor de MFC (containermfc). Puede cambiar el nombre de este archivo .exe.

Nota de seguridad:

Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que quizás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió.

Para obtener ejemplos e instrucciones para su instalación:

  • En el menú Ayuda de Visual Studio, haga clic en Ejemplos.

    Para obtener más información, vea Localizar archivos de ejemplo.

  • La lista de ejemplos completa con la versión más reciente está disponible en línea en la página Visual Studio 2008 Samples.

  • También encontrará ejemplos en el disco duro de su equipo. De manera predeterminada, los ejemplos y el archivo Léame se copian en una carpeta bajo \Archivos de programa\Visual Studio 9.0\Samples\. Para las versiones Express de Visual Studio, todos los ejemplos están en línea.

Generar y ejecutar el ejemplo

Para generar y ejecutar el ejemplo StockTicker

  1. Abra la solución StockTicker.sln.

  2. En el menú Generar, haga clic en Generar.

  3. Utilice regsvr32 para registrar dos DLLs: stockquotes.dll y stocktickeratl.dll. Puede ser necesario registrar ATL.dll también.

    La DLL de extensión de ISAPI imita un origen de datos bursátiles. Se debe instalar en un equipo que tenga instalado software de servidor Web (como Microsoft Internet Information Services [IIS]). Debe indicar a StockTicker donde se encuentra esta DLL. Para obtener instrucciones sobre cómo utilizar la DLL de extensión de ISAPI, vea los párrafos siguientes.

  4. Ejecute containermfc.exe. Haga clic con el botón secundario del mouse (ratón) en el área del cliente de la aplicación para mostrar un menú de acceso directo. Utilice este menú para cambiar el comportamiento y las propiedades de StockTicker, que se describen en una sección posterior.

Cómo agregar sitios Web de origen de datos bursátiles

Siga estos pasos para agregar su propio sitio Web de origen de datos bursátiles.

  1. Modifique stockquotes\stockquotes_.h. Examine la clase CSQSISAPIDll. Puede utilizar la clase como ejemplo para crear clases nuevas de cotización en bolsa.

  2. Cree una clase nueva derivada de CStockQuoteSource.

  3. En el constructor de la clase nueva, defina m_strURL con la dirección URL completa del sitio Web de donde se recuperarán los datos. Asegúrese de incluir el comando para recuperar los datos bursátiles.

  4. El formato del HTML devuelto por el sitio Web puede requerir el reemplazo de SetStockInfo y ParseStockInfo.

  5. Vuelva a generar el componente y regístrelo.

Si el sitio seleccionado devuelve datos similares a CONAME: <NA>, donde CONAME es el símbolo de valor, significa que no se pudo tener acceso al sitio o que la clase del origen que creó no pudo encontrar la información bursátil del HTML.

Nota:

El formato, ya sea decimal o fraccionario, de los datos bursátiles puede diferir entre las cotizaciones que elija controlar. StockTicker no intenta modificar los datos para hacerlos coherentes.

Comportamiento y propiedades de StockTicker

  • Valores
    Muestra un cuadro de diálogo que permite agregar o quitar los símbolos de valores bursátiles que se van a controlar. El cuadro de diálogo se inicializa con la lista actual de símbolos de valores bursátiles.

  • Actualizar ahora
    Actualiza la información bursátil del Web.

  • Propiedades
    El cuadro de diálogo Propiedades tiene tres páginas de propiedades: Color, Fuente y Personalizar. Si no aparecen las páginas de propiedades Color y Fuente, asegúrese de que ha registrado msstkprp.dll.

    Puede cambiar las siguientes propiedades.

    • Velocidad del indicador   Mueva el control deslizante para aumentar o reducir la velocidad a la que se desplaza la información bursátil de derecha a izquierda.

    • Intervalo de actualización   Tiempo en minutos entre actualizaciones.

    • URL de la DLL de extensión de ISAPI   Escriba la dirección URL completa de la DLL de extensión de ISAPI. Agregue el siguiente texto al final de la dirección URL: ?QueryForStock?Symbol=.

      Al especificar la dirección URL de la DLL de extensión de ISAPI, debe incluir el componente responsable de devolver el HTML que contiene la información bursátil.

  • Acerca de Stock Ticker
    Abre el cuadro de diálogo Acerca de.

  • Siempre visible
    StockTicker permanecerá delante de las demás aplicaciones; de lo contrario, las demás aplicaciones lo ocultarían.

Características que utiliza StockTicker

  • Objeto ATL COM

  • Objeto de cuadro de diálogo ATL

  • Control ATL

  • Clases para Internet de MFC (WinInet)

  • DLL de extensión de ISAPI de MFC

  • Puntos de conexión

  • Persistencia

  • Enumeradores personalizados

  • Biblioteca estándar de C++

Componentes de StockTicker

Esta sección proporciona información más detallada de los componentes de StockTicker

  • Componente Stock Quotes
    El componente compartido, el objeto ATL, se crea con el Asistente para proyectos ATL. Utiliza la compatibilidad con WinInet de MFC y otras clases de utilidad. El componente Stock Quotes mantiene un seguimiento de las cotizaciones que se van a controlar y actualiza la información bursátil con la información de Internet. Una aplicación puede utilizar este componente para actualizaciones sincrónicas y asincrónicas. Si se llama al método StartUpdating, se crea un subproceso secundario y la función devuelve un valor inmediatamente. El subproceso secundario crea un temporizador y espera hasta que transcurre el intervalo de actualización. A continuación, solicita una actualización del componente Stock Quotes. Las llamadas siguientes a Update exponen un mensaje de un subproceso al subproceso secundario indicando que se debe llevar a cabo una actualización y Update devuelve un valor inmediatamente. En el modo sincrónico, Update se bloquea hasta que finaliza la descarga.

    Este componente mantiene un seguimiento de los objetos origen de la información bursátil que representan los sitios Web desde donde se descarga dicha información. Cuando StockTicker actualiza la información bursátil, se desplaza por la lista de orígenes de datos bursátiles e intenta descargar la información. Si el intento falla, el componente intenta descargar la información bursátil del siguiente origen. Si no puede descargar información de ningún origen de datos bursátiles, aparecerá <NA> en la ventana del indicador después del símbolo de valor.

    Los datos bursátiles vienen del sitio Web con formato HTML. Se debe analizar la información para buscar el precio actual y el cambio que se ha producido desde la última actualización. El componente Stock Quotes controla este análisis buscando dos palabras clave; por ejemplo, Current: o Change:. El componente lee los datos que siguen a las palabras clave si son un número fraccionario o decimal.

    Puesto que los sitios Web bursátiles pueden cambiar el modo de proporcionar los datos, es posible que deba cambiar el algoritmo que utiliza este componente para obtener la información bursátil.

    Vea las instrucciones que se incluyen a continuación sobre cómo agregar sus propios orígenes de datos bursátiles.

  • Archivo DLL de extensión ISAPI
    El origen de datos bursátiles predeterminado es la DLL de extensión de ISAPI local. Esta DLL no devuelve información de bolsa real. En su lugar, cuando solicita información de un valor, la DLL comprueba si el símbolo de valor está en su lista de valores conocidos. Si el símbolo de valor está en la lista, la DLL recupera los datos y ajusta arbitrariamente el precio del valor actual por lo alto o por lo bajo. Si el símbolo de valor es nuevo, se agrega a la lista y se establece un precio de valor inicial.

  • Control Stock Ticker
    Este control se creó con el Asistente para objetos ATL. Utiliza MFC para facilitar algunas cosas.

    Puede utilizar este control fuera de StockTicker.

    Este control utiliza el componente Stock Quotes para controlar la información bursátil y las actualizaciones. Cuando llega el momento de guardarse a sí mismo en una secuencia, el control le pide al componente Stock Quotes que se guarde también.

    Al inicio, el control Stock Ticker crea el componente Stock Quotes y le pide que comience la actualización de la información bursátil. A continuación, el control inicia un temporizador que utiliza para el bucle dibujar/representar. Una vez actualizados los datos bursátiles, el componente Stock Quotes envía una notificación al control (a través de un punto de conexión). Después, el control obtiene toda la información del componente Stock Quotes y crea una cadena con ella. Esta cadena se dibuja en el control y se desplaza de derecha a izquierda.

  • Contenedor de Stock Ticker
    Se trata de un contenedor de control Active de MFC creado con el Asistente para aplicaciones MFC. Guarda el tamaño y la posición al cerrarse y restaura su estado anterior cuando se reinicia.

    El contenedor controla también los menús de StockTicker

Palabras clave

En este ejemplo, se muestra el uso de las siguientes palabras clave:

IEnumXXX, CWinThread, std::vector, IConnectionPointContainer, CInternetSession, CInternetException, AfxParseURL, CHttpConnection, CHttpFile, COleClientItem, COleDocument, COleDispatchDriver, CreateILockBytesOnHGlobal, StgCreateDocfileOnILockBytes, OleSave, StgIsStorageILockBytes, GetHGlobalFromILockBytes, COleFont, std::basic_istream, std::basic_ostream, CHttpServer, CComPtr, CDialogImpl, std::list, IPersistStreamInit, IFontDisp, IViewObjectEx, CComControl, IOleControl, IPropertyPageImpl, CBitmap, CDC, IPersistStreamInit_Load, IPersistStreamInit_Save, IConnectionPointImpl

Nota:

Algunos ejemplos, como éste, no se han modificado para reflejar los cambios en los asistentes, las bibliotecas y el compilador de Visual C++, pero, aun así, muestran cómo realizar la tarea deseada.

Vea también

Otros recursos

Ejemplos de MFC