Поделиться через


Образец StockTicker: отображение веб-данных в элементе управления ATL

Обновлен: Ноябрь 2007

Образец StockTicker загружает биржевые сводки из Интернета и выводит их в элементе управления ATL, данные в котором прокручиваются справа налево. Элемент управления обновляет данные через интервалы, задаваемые пользователем.

Образец StockTicker состоит из четырех частей.

  • Общий компонент ATL (stockquotes).

  • Элемент управления ATL (stocktickeratl).

  • Библиотека расширения ISAPI (stocksourcemfc).

  • Контейнерное приложение MFC (containermfc). Этот EXE-файл можно переименовать.

031b9kkw.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению.

Чтобы получить образцы и инструкции по их установке, выполните следующие действия.

  • В меню Справка среды Visual Studio выберите пункт Примеры.

    Дополнительные сведения см. в разделе Поиск файлов примеров.

  • Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.

  • Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.

Построение и запуск образца

Построение и запуск образца StockTicker

  1. Откройте решение StockTicker.sln.

  2. В меню Построение выберите команду Построить.

  3. С помощью программы regsvr32 зарегистрируйте две библиотеки DLL: stockquotes.dll и stocktickeratl.dll. Также может понадобиться зарегистрировать библиотеку ATL.dll.

    Библиотека расширения ISAPI имитирует источник биржевых данных. Ее нужно установить на компьютер, где установлено ПО веб-сервера (например, службы Microsoft IIS). Необходимо сообщить приложению StockTicker, где находится эта библиотека. Инструкции по использованию библиотеки расширения ISAPI см. далее.

  4. Запустите containermfc.exe. Щелкните правой кнопкой мыши в клиентской области приложения, чтобы вывести контекстное меню. В этом меню изменяются правила работы и свойства StockTicker, как описано в следующем подразделе.

Добавление веб-узлов в качестве источников биржевых данных

Чтобы добавить собственный веб-узел в качестве источника биржевых данных, выполните следующие действия.

  1. Измените файл stockquotes\stockquotes_.h. Изучите код класса CSQSISAPIDll. Этот класс может служить примером для создания новых классов биржевых котировок.

  2. Создайте новый класс, производный от CStockQuoteSource.

  3. В конструкторе нового класса установите в переменной m_strURL полный URL-адрес веб-узла, с которого будут извлекаться данные. Обязательно включите команду, которая будет извлекать биржевые данные.

  4. В соответствии с форматом HTML-данных, возвращаемых с веб-узла, может потребоваться переопределение метода SetStockInfo или метода ParseStockInfo.

  5. Повторно постройте компонент и зарегистрируйте его.

Если выбранный узел возвращает данные в виде CONAME: <NA>, где CONAME представляет биржевой символ, то либо не удается получить доступ к веб-узлу, либо созданному исходному классу не удается найти биржевые данные в полученном HTML-коде.

031b9kkw.alert_note(ru-ru,VS.90).gifПримечание.

Для различных акций, выбранных для отслеживания, может использоваться различный формат биржевых данных (десятичный или дробный). Приложение StockTicker не вносит в данные изменения, направленные на обеспечение согласованного представления.

Правила работы и свойства приложения StockTicker

  • Stocks
    Выводит диалоговое окно, в котором можно добавить или удалить отслеживаемые биржевые символы. Это диалоговое окно инициализируется текущим списком биржевых символов.

  • Update Now
    Обновляет биржевые данные из Интернета.

  • Properties
    В диалоговом окне Properties находятся три страницы свойств: color, font и custom. Если в диалоговом окне Properties отсутствуют страницы color и font, убедитесь, что зарегистрирована библиотека msstkprp.dll.

    Можно изменять следующие свойства.

    • Ticker Speed.   Перемещайте ползунок, чтобы увеличить или уменьшить скорость, с которой биржевые сведения прокручиваются справа налево.

    • Update Interval.   Время (в минутах) между обновлениями.

    • ISAPI Extension DLL URL.   Введите полный URL-адрес библиотеки расширения ISAPI. Добавьте в конец URL-адреса следующий текст: ?QueryForStock?Symbol=.

      Если указывается URL-адрес библиотеки расширения ISAPI, необходимо включить компонент, который возвращает HTML-код, содержащий биржевые сведения.

  • About Stock Ticker
    Открывает диалоговое окно About.

  • Stay On Top
    Если выбрать этот параметр, окно StockTicker будет располагаться поверх окон остальных приложений. В противном случае, оно может скрываться окнами других приложений.

Функции, используемые образцом StockTicker

  • COM-объект ATL

  • Объект диалогового окна ATL

  • Элемент управления ATL

  • Классы MFC для работы в Интернете (WinInet)

  • Библиотека расширения ISAPI MFC

  • Точки подключения

  • Механизм сохраняемости

  • Пользовательские перечислители

  • Стандартная библиотека C++

Компоненты StockTicker

В этом подразделе приводятся подробные сведения о компонентах StockTicker.

  • Компонент Stock Quotes
    Общий компонент является объектом ATL и создается мастером приложений проекта ATL. Он использует поддержку MFC WinInet и другие служебные классы. Компонент Stock Quotes отслеживает акции и обновляет биржевые сводки данными из Интернета. Приложение может использовать этот компонент для выполнения синхронного или асинхронного обновления. Если вызывается метод StartUpdating, создается дочерний поток, и функция немедленно возвращает значение. Дочерний поток создает таймер и ожидает истечения заданного интервала обновления. Затем он запрашивает обновление в компоненте Stock Quotes. При последующих вызовах метода Update в дочерний поток отправляется сообщение, показывающее, что следует выполнить обновление, и метод Update немедленно завершает работу. В синхронном режиме метод Update блокирует работу до завершения загрузки.

    Компонент Stock Quotes отслеживает объекты-источники биржевых данных, представляющие веб-узлы, с которых загружаются биржевые данные. Когда приложение StockTicker обновляет биржевые данные, компонент Stock Quotes проходит по списку источников биржевых данных и выполняет попытку загрузить данные. Если эта попытка завершается ошибкой, компонент пытается загрузить биржевые данные из следующего источника. Если не удается загрузить данные ни из одного из источников, в окне StockTicker после биржевого символа выводится строка <NA>.

    Биржевые данные передаются с веб-узла в формате HTML. Необходимо выполнить синтаксический анализ данных, чтобы определить текущую цену и изменение цены с момента последнего обновления. Компонент Stock Quotes выполняет такой синтаксический анализ, выполняя поиск по двум ключевым словам, например Current: или Change:. Компонент считывает данные, которые следуют за ключевыми словами, если эти данные имеют вид дробного или десятичного числа.

    Поскольку биржевые веб-узлы могут изменять способ передачи данных, может понадобиться изменить алгоритм, используемый компонентом Stock Quotes для получения биржевых данных.

    Инструкции по добавлению собственных источников биржевых данных см. ниже.

  • Библиотека расширения ISAPI
    Источником биржевых данных по умолчанию является библиотека расширения ISAPI. Библиотека расширения ISAPI не возвращает фактические биржевые данные. Вместо этого, когда запрашиваются данные для некоторой акции, библиотека проверяет, находится ли соответствующий биржевой символ в списке известных акций. Если биржевой символ находится в списке, библиотека получает данные и случайным образом корректирует текущую цену акции в сторону увеличения или уменьшения. Если биржевой символ оказывается новым, он добавляется в список, и задается исходная цена акции.

  • Элемент управления Stock Ticker
    Этот элемент управления создан мастером объектов ATL. Он использует библиотеку MFC для упрощения некоторых операций.

    Этот элемент управления можно использовать за пределами StockTicker.

    Элемент управления Stock Ticker использует компонент Stock Quotes для обработки биржевых данных и выполнения обновлений. Когда нужно сохранить данные в поток, элемент управления также запрашивает сохранение компонента Stock Quotes.

    В момент запуска элемент управления Stock Ticker создает компонент Stock Quotes и запрашивает в нем начало обновления биржевых данных. Затем элемент управления запускает таймер, который используется для цикла рисования и отображения. После обновления биржевых данных компонент Stock Quotes уведомляет элемент управления (через точку подключения). Затем элемент управления получает все биржевые сведения от компонента Stock Quotes и создает из них строку. Это строка выводится в элементе управления и прокручивается справа налево.

  • Контейнер Stock Ticker
    Контейнер Stock Ticker является контейнером активных элементов управления MFC, созданным мастером приложений MFC. Его размеры и расположение сохраняются после выхода, и во время повторного запуска восстанавливается предыдущее состояние контейнера.

    Контейнер также выполняет операции с меню StockTicker.

Ключевые слова

В этом образце показаны следующие ключевые слова:

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

031b9kkw.alert_note(ru-ru,VS.90).gifПримечание.

Некоторые образцы, включая данный, не модифицировались с учетом изменений в мастерах, библиотеках и компиляторе Visual C++, однако по-прежнему демонстрируют выполнение требуемой задачи.

См. также

Другие ресурсы

Примеры MFC