StockTicker サンプル:Web 情報の表示、ATL コントロール

StockTicker サンプルは、Web から株式情報をダウンロードし、データが左右にスクロールする ATL コントロールにその情報を表示します。 コントロールでは、ユーザーが設定した間隔でデータが更新されます。

StockTicker は次の 4 つの部分で構成されます。

  • 共有 ATL コンポーネント (stockquotes)。

  • ATL コントロール (stocktickeratl)。

  • ISAPI 拡張 DLL (stocksourcemfc)。

  • MFC コンテナー アプリケーション (containermfc)。 この .exe ファイルの名前は変更できます。

セキュリティに関するメモセキュリティに関するメモ

このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。

サンプルとそのインストール手順を取得するには

Visual Studio のサンプルにアクセスするには

  • [ヘルプ] メニューの [サンプル] をクリックします。

    既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。

  • このサンプルの最新版および他のサンプルの一覧については、MSDN Web サイト上で Visual Studio サンプル 」を参照してください。

サンプルのビルドと実行

StockTicker サンプルをビルドおよび実行するには

  1. StockTicker.sln ソリューション ファイルを開きます。

  2. [ビルド] メニューの [ビルド] をクリックします。

  3. regsvr32 を使用して、2 つの DLL を登録します。stockquotes.dll および stocktickeratl.dll ATL.dll の登録も必要な場合があります。

    ISAPI 拡張 DLL は、株式データ ソースを模倣したものです。 これは、Web サーバー ソフトウェア (Microsoft IIS (Internet Information Services) など) がインストールされているコンピューターにインストールする必要があります。 インストールした DLL の場所は、StockTicker に通知する必要があります。 ISAPI 拡張 DLL の使い方については、次の説明を参照してください。

  4. containermfc.exe を実行します。 アプリケーションのクライアント領域を右クリックして、ショートカット メニューを表示します。 このメニューを使用して、次のセクションに示すように StockTicker の動作やプロパティを変更します。

株式ソースにする Web サイトの追加方法

次の手順を実行して、独自の株式ソースにする Web サイトを追加します。

  1. stockquotes\stockquotes_.h を編集します。 CSQSISAPIDll クラスを調べます。 このクラスは、新しい株式相場クラスを作成するための例として使用できます。

  2. CStockQuoteSource の派生クラスを新規作成します。

  3. 新しいクラスのコンストラクターで、m_strURL をデータを取得する Web サイトの完全パスの URL に設定します。 株式データを取得するコマンドを指定します。

  4. Web サイトから返される HTML の形式によっては、SetStockInfo または ParseStockInfo (あるいは両方) をオーバーライドする必要があります。

  5. コンポーネントをリビルドして、登録します。

選択したサイトが CONAME: <NA> (CONAME は株式銘柄) などのデータを返す場合は、そのサイトにアクセスできなかったか、作成したソース クラスが HTML の株式情報を見つけることができなかったことを意味します。

注意

株式データの形式 (小数または分数) は、監視対象の株式ごとに異なる場合があります。StockTicker では、データ形式を統一するためのデータ変換は行われません。

StockTicker の動作とプロパティ

  • [Stocks]
    監視する株式銘柄を追加または削除するためのダイアログ ボックスが表示されます。 このダイアログ ボックスは、株式銘柄の現在の一覧で初期化されます。

  • [Update Now]
    Web を使用して株式情報を更新します。

  • プロパティ
    [プロパティ] ダイアログ ボックスの 3 つのプロパティ ページがあります。色、フォント、およびカスタム。 株式の色やフォントのプロパティ ページが [Properties] ダイアログ ボックスに表示されない場合は、msstkprp.dll が登録されていることを確認してください。

    以下のプロパティを変更できます。

    • [Ticker Speed]   スライダーを動かして株式情報を右から左へスクロールする速度を調整します。

    • [Update Interval]   更新の間隔を分単位で指定します。

    • [ISAPI Extension DLL URL]   ISAPI 拡張 DLL の完全パスの URL を入力します。 URL の末尾に次のテキストを追加します。 ?QueryForStock?Symbol=.

      ISAPI 拡張 DLL の URL を指定するときは、株式情報を含む HTML を返すコンポーネントを組み込む必要があります。

  • [About Stock Ticker]
    [About] ダイアログ ボックスを開きます。

  • [Stay On Top]
    StockTicker が常にすべてのアプリケーションの前面に表示されます。これを指定しないと、ほかのアプリケーションの下に隠れる場合があります。

StockTicker が使用する機能

  • ATL COM オブジェクト

  • ATL ダイアログ オブジェクト

  • ATL コントロール

  • MFC インターネット (WinInet) クラス

  • MFC ISAPI 拡張 DLL

  • [コネクション ポイント]

  • 永続化

  • カスタム列挙子

  • 標準 C++ ライブラリ

StockTicker のコンポーネント

ここでは、StockTicker のコンポーネントについてさらに詳しく説明します。

  • Stock Quotes Component
    共有コンポーネントは、ATL プロジェクト ウィザードで作成された、ATL オブジェクトです。 このオブジェクトでは、MFC WinInet サポートなどのユーティリティ クラスを使用します。 Stock Quotes は、監視する株式を追跡し、インターネットを使用して株式情報を更新します。 アプリケーションはこのコンポーネントを使用して、同期または非同期で株式情報を更新できます。 StartUpdating メソッドが呼び出されると、子スレッドが作成され、関数がすぐに戻ります。 子スレッドはタイマーを作成し、更新間隔が経過するまで待機します。 次に、子スレッドは Stock Quotes コンポーネントに更新を要求します。 その後の Update の呼び出しでは、スレッド メッセージが子スレッドにポストされて更新が必要であることが通知され、Update はすぐに戻ります。 同期モードでは、ダウンロードが完了するまで Update がブロックされます。

    Stock Quotes コンポーネントは、株式情報をダウンロードする Web サイトを表す株式データ ソース オブジェクトを追跡します。 StockTicker が株式情報を更新すると、Stock Quotes コンポーネントは株式データ ソースの一覧を調べて、情報をダウンロードしようとします。 ダウンロードに失敗すると、コンポーネントは次のソースから株式情報をダウンロードしようとします。 すべての株式データ ソースで情報のダウンロードに失敗すると、ticker ウィンドウの株式銘柄の横に "<NA>" と表示されます。

    株式データは、Web サイトから HTML 形式で取得されます。 現在の株価と最終更新以降の価格変化を調べるには、データを解析する必要があります。 Stock Quotes コンポーネントは、この 2 つのキーワードを検索することによって解析処理します。たとえば、Current: または Change:。 データが分数または小数であると、このコンポーネントはキーワードの後のデータを読み取ります。

    Web の株式サイトがデータの配布方法を変更する場合は、Stock Quotes で使用する株式情報の取得アルゴリズムを変更する必要があります。

    独自の株式データ ソースを追加する方法については、次の説明を参照してください。

  • ISAPI extension DLL
    既定の株式データ ソースは、ローカルの ISAPI 拡張 DLL です。 ISAPI 拡張 DLL では、実際の株式データは返されません。 株式データが要求されると、この DLL はその株式銘柄が既存の株式の一覧にあるかどうかを調べます。 株式銘柄が一覧にある場合、DLL はデータを取得し、現在の株価をランダムに上方または下方調整します。 株式銘柄が新規の場合は一覧に追加され、初期株価が設定されます。

  • Stock Ticker Control
    このコントロールは、ATL オブジェクト ウィザードによって作成されています。 このコントロールは、MFC を使用していくつかの処理を簡単にします。

    このコントロールは、StockTicker の外部で使用できます。

    Stock Ticker コントロールは、Stock Quotes コンポーネントを使用して、株式情報を処理および更新します。 自らをストリームに保存するときも、このコントロールは保存処理を Stock Quotes コンポーネントに要求します。

    起動時には、Stock Ticker コントロールが Stock Quotes コンポーネントを作成し、このコンポーネントに株式情報の更新を開始するように要求します。 次にコントロールは、描画/表示のループで使用するタイマーを開始します。 株式データが更新されると、Stock Quotes コンポーネントは、コネクション ポイントを通じてコントロールに通知します。 次に、コントロールは、Stock Quotes コンポーネントからすべての株式情報を取得し、その情報から文字列を作成します。 この文字列はコントロールに描画され、右から左にスクロールされます。

  • Stock Ticker Container
    Stock Ticker コンテナーは、MFC アプリケーション ウィザードによって作成された、MFC Active コントロール コンテナーです。 このコンテナーでは、終了時にサイズや位置を保存し、再起動時には前回終了時の状態を復元します。

    StockTicker のメニューもこのコンテナーによって処理されます。

Keywords

このサンプルでは、次のキーワードを使用します。

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

注意

このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。

参照

その他の技術情報

MFC サンプル