StockTicker 範例:在 ATL 控制項中顯示 Web 資訊

更新:2007 年 11 月

StockTicker 範例會從 Web 下載股票資訊並將該資訊顯示在可以將資料由右至左捲動的 ATL 控制項中。此控制項會以使用者設定的間隔更新資料。

StockTicker 包含四個部分:

  • 共用的 ATL 元件 (stockquotes)

  • ATL 控制項 (stocktickeratl)

  • ISAPI 擴充程式 DLL (stocksourcemfc)

  • MFC 容器應用程式 (containermfc)您可以重新命名這個 .exe 檔。

安全性注意事項:

這個程式碼範例僅供概念說明之用,同時因為範例中的程式碼撰寫並沒有周全的顧及所有安全性問題,所以本範例不適用於實際執行的應用程式或網站中。如果使用者擅自將範例程式碼用於其他意圖而導致連帶事件或重大損害時,Microsoft 將不承擔任何責任。

若要取得範例和指示以便進行安裝:

  • 按一下 Visual Studio [說明] 功能表上的 [範例]。

    如需詳細資訊,請參閱尋找範例檔案

  • 最新版的完整範例清單可從 Visual Studio 2008 範例網頁 (英文) 取得。

  • 您也可以將範例置於電腦硬碟中。根據預設,範例和讀我檔案都會複製到 \Program Files\Visual Studio 9.0\Samples\ 下的資料夾中。對於所有的 Visual Studio Express 版,所有範例都可在線上找到。

建置和執行範例

若要建置並執行 StockTicker 範例

  1. 開啟 StockTicker.sln 方案。

  2. 在 [建置] 功能表上,按一下 [建置]。

  3. 使用 regsvr32 來登錄兩個 DLL:stockquotes.dll 和 stocktickeratl.dll。您可能還需要登錄 ATL.dll。

    ISAPI 擴充程式 DLL 會模擬股票資料來源。它應該安裝在已經安裝 Web 伺服器軟體 (例如 Microsoft Internet Information Services (IIS) 的電腦上。您必須告知 StockTicker 此 DLL 的位置。如需如何使用 ISAPI 擴充程式 DLL 的指示,請參閱以下內容。

  4. 執行 containermfc.exe。在應用程式的工作區 (Client Area) 中按一下滑鼠右鍵,以顯示快速鍵功能表。請使用這個功能表來變更 StockTicker 的行為和屬性,如下列章節中述。

如何加入股票來源網站

依照以下步驟來加入您個人的股票來源網站。

  1. 編輯 stockquotes\stockquotes_.h。檢查 CSQSISAPIDll 類別。您可以使用此類別做為建立新股價類別的範例。

  2. 建立一個衍生自 CStockQuoteSource 的新類別。

  3. 在新的類別建構函式中,將 m_strURL 設定為擷取資料之網站的完整 URL。確定有包含用於擷取股票資料的命令。

  4. 從網站傳回的 HTML 格式會要求您覆寫 SetStockInfo 和 (或) ParseStockInfo。

  5. 重建這個元件並加以登錄。

如果選取的網站傳回類似 CONAME: <NA> 的資料 (其中 CONAME 是股票代號),則表示無法存取這個網站,或您建立的來源類別無法從這個 HTML 找到股票資訊。

注意事項:

股票資料的格式 (不是十進位就是分數),會根據您選擇監控的股票而有所不同。StockTicker 並不會嘗試更改資料來使其維持一致。

StockTicker 的行為和屬性

  • 股票
    顯示一個對話方塊,您可以透過這個對話方塊將股票代號加入或移除要監控的股票代號。這個對話方塊是使用目前的股票代號清單來初始化。

  • 立即更新
    更新來自 Web 的股票資訊。

  • 屬性
    [屬性] 對話方塊具有三個屬性頁:色彩、字型和自訂。如果在 [屬性] 對話方塊中並沒有顯示股票色彩和字型屬性頁,請確定您已經登錄 msstkprp.dll。

    您可以變更下列屬性。

    • Ticker Speed:移動滑桿來增加或減少股票資訊由右至左捲動的速率。

    • Update Interval:以分鐘為單位的更新間隔。

    • ISAPI Extension DLL URL:輸入 ISAPI 擴充程式 DLL 的完整 URL。將以下文字附加至 URL 的結尾:?QueryForStock?Symbol=。

      當指定 ISAPI 擴充程式 DLL 的 URL 時,您需要將負責傳回包含股票資訊之 HTML 的元件包括在內。

  • About Stock Ticker
    開啟 [關於] 對話方塊。

  • Stay On Top
    StockTicker 將停留在所有其他應用程式的上方,否則,它可以被其他應用程式隱藏。

StockTicker 所使用的功能

  • ATL COM 物件

  • ATL 對話方塊物件

  • ATL 控制項

  • MFC Internet (WinInet) 類別

  • MFC ISAPI 擴充程式 DLL

  • 連接點

  • 持續性

  • 自訂列舉值

  • Standard C++ 程式庫

StockTicker 元件

本章節提供 StockTicker 元件的詳細資訊。

  • Stock Quotes 元件
    這個共用元件 (ATL 物件) 是使用「ATL 專案應用程式精靈」所建立的。它使用 MFC WinInet 支援和其他公用程式類別。Stock Quotes 會記錄要監控的股票,並從網際網路更新股票資訊。應用程式可以利用此元件進行同步或非同步更新。如果呼叫 StartUpdating 方法,則將會建立一個子執行緒並立即傳回函式。這個子執行緒會建立一個計時器並等待,直到已經經過更新的間隔時間,然後它會從 Stock Quotes 元件要求更新。對 Update 的後續呼叫會傳送一個執行緒訊息給子執行緒,指出應進行更新,然後 Update 就會立即返回。在同步模式中,Update 會一直凍結到下載完成時為止。

    Stock Quotes 元件會記錄代表網站 (下載股票資訊的來源) 的股票資料來源物件。當 StockTicker 更新股票資訊時,Stock Quotes 元件會查閱股票資料來源清單,並嘗試下載資訊。如果嘗試下載失敗,元件將會試著從下一個來源下載股票資料。如果所有的股票資料來源都無法下載資訊,則在行情即時看版視窗中的股票代號後面將會出現 <NA>。

    來自網站的股票資料是以 HTML 的形式傳遞。資料必須先被剖析,才能找到目前價格和自上一次更新後的價格變更。Stock Quotes 元件會藉由搜尋兩個關鍵字來處理這項剖析:例如,Current: 或 Change:。如果關鍵字後的資料是分數或十進位數字 (分數或十進位),元件就會讀取該資料。

    由於股票網站可能會變更它們傳送資料的方式,所以您可能必須變更 Stock Quotes 用來取得股票資訊的演算法。

    如需如何加入個人的股票資料來源的指示,請參閱以下內容。

  • ISAPI 擴充程式 DLL
    預設的股票資料來源為本機 ISAPI 擴充程式 DLL。ISAPI 擴充程式 DLL 並不會傳回真正的股票資料,而是當您要求股票資料時,DLL 會檢查該股票代號是否已經在它的已知股票清單中。如果股票代號在清單中,則 DLL 會擷取此資料並隨機向上或向下調整目前股票價格。如果股票代號是新的,它會被加入至清單並且被設定一個初始股價。

  • 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 Active 控制項容器。它會在結束時立即儲存其大小和位置,當它重新啟動時,就會還原成之前的狀態。

    這個容器也會處理 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

注意事項:

部分範例 (包括本範例) 尚未經過改寫,無法反映出目前在 Visual C++ 精靈、程式庫以及編譯器方面的變更,不過還是可以示範如何完成您要進行的工作。

請參閱

其他資源

MFC 範例