亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? stockquotes_.h

?? 一個(gè)補(bǔ)票分析程序
?? H
字號(hào):
// StockQuotes_.h : Declaration of the CStockQuotes
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

#ifndef __STOCKQUOTES_H_
#define __STOCKQUOTES_H_

#include "resource.h"       // main symbols
#include "cpstockquotes.h"
#include <afxole.h>

//////////////////////////////////////////////////////////////////////////////
// CStock
//
// Represents a stock.  Tracks current price, change from last price and
// stock symbol.
//
class CStock
{
public:
	CStock() {}
	CStock(const CString& strSymbol)
	: m_strSymbol(strSymbol) {}

	void        GetStockInfo(CString& strCurrent, CString& strChange)
		{ strCurrent = m_strCurrent; strChange = m_strChange; }
	void        SetStockInfo(const CString& strCurrent, const CString& strChange)
		{ SetCurrent(strCurrent); SetChange(strChange); }
	void        SetCurrent(const CString& strCurrent)
		{ m_strCurrent = strCurrent; }
	CString     GetCurrent()
		{ return m_strCurrent; }
	void        SetChange(const CString& strChange)
		{ m_strChange = strChange; }
	CString     GetChange()
		{ return m_strChange; }
	CString     GetSymbol()
		{ return m_strSymbol; }
	bool operator == (const CStock& s) const
		{ return m_strSymbol == s.m_strSymbol; }
	bool operator < (const CStock& s) const
		{ return m_strSymbol < s.m_strSymbol; }


protected:
	CString     m_strCurrent;   // current (or last) price.
	CString     m_strChange;    // change from previous price.
	CString     m_strSymbol;    // the stock that is being tracked.
};
typedef std::vector<CStock> CStockList;
typedef std::vector<CStock>::iterator CStockListIter;

//////////////////////////////////////////////////////////////////////////////
// CStockQuoteSource
//
// Source of the stock information.  Responsible for downloading and parsing
// info from web for given stock.  Multiple stock sources exist, if one fails
// hopfully one of the others will succeed.
//
class CStockQuoteSource
{
public:
	CStockQuoteSource() : m_bInTag(false) {}
	virtual ~CStockQuoteSource() {}

	virtual bool        Update(CInternetSession& session, CStock& stock)
		{  return DownloadStockInfo(session, stock); }
	virtual CString     GetURL() { return m_strURL; }
	virtual void        SetURL(const CString& /*strURL*/) {}

	// to make finding them easier since CStockQuotes need to access them to save their URLs.
	//
	virtual bool        IsMSInvestor() { return false; }
	virtual bool        IsISAPIDll() { return false; }

	bool operator == (const CStockQuoteSource& s) const
		{ return m_strURL == s.m_strURL; }
	bool operator < (const CStockQuoteSource& /*s*/) const
		{ return false; }

protected:
	BYTE*               m_buffer;       // buffer for data from web.
	CString             m_strURL;       // URL to connect to.
	bool                m_bInTag;       // parsing a tag?
	virtual bool        DownloadStockInfo(CInternetSession& session, CStock& stock);
	virtual bool        SetStockInfo(CHttpFile* pFile, CStock& stock) = 0;
	virtual bool        SetStockInfoHelper(CHttpFile* pFile, CStock& stock,
										   TCHAR* szCurText, TCHAR* szChangeText);
	virtual bool        ParseStockInfo(TCHAR* szBuf, TCHAR* szHeader, CString& strResult);
	virtual void        StripTags(LPTSTR pszBuffer);
	virtual void        StripExtraSpace(CString& s);
	virtual void        SetURLHelper(const CString& strURL, const CString& strURLTail);
};

//////////////////////////////////////////////////////////////////////////////
// CSQSMSInvestor
//
// Microsoft Investor Stock Quotes.
//
class CSQSMSInvestor : public CStockQuoteSource
{
public:
	CSQSMSInvestor()
	: m_bFoundHeader(false)
	{
		m_strURL = _T("http://moneycentral.msn.com/scripts/webquote.dll?Symbol=");
	}

	virtual void        SetURL(const CString& strURL)
		{ SetURLHelper(strURL, _T("/quotes/quote.asp?Symbol=")); }
	virtual bool        IsMSInvestor() { return true; }

protected:
	virtual bool        SetStockInfo(CHttpFile* pFile, CStock& stock);
	virtual bool        ParseStockInfo(TCHAR* szBuf, TCHAR* szHeader, CString& strResult);

	bool                m_bFoundHeader;
};

//////////////////////////////////////////////////////////////////////////////
// CSQSISAPIDll
//
// ISAPI Dll Stock Source.
//
class CSQSISAPIDll : public CStockQuoteSource
{
public:
	CSQSISAPIDll()
	{
		m_strURL = _T("<Need to specify URL to ISAPI DLL>?QueryForStock?Symbol=");
	}

	virtual void        SetURL(const CString& strURL)
		{ SetURLHelper(strURL, _T("?QueryForStock?Symbol=")); }
	virtual bool        IsISAPIDll() { return true; }

protected:
	virtual bool        SetStockInfo(CHttpFile* pFile, CStock& stock);
};

//////////////////////////////////////////////////////////////////////////////
// CSQSList
//
// List of stock quote sources.
//
class CSQSList : public std::vector<CStockQuoteSource*>
{
public:
	CSQSList() {}
	~CSQSList() { Cleanup(); }

	void Init();        // creates all the sources here.

	CStockQuoteSource* GetMSInvestor();
	CStockQuoteSource* GetStockSourceISAPIDll();

protected:
	void Cleanup();
};

/////////////////////////////////////////////////////////////////////////////
// CEnumStocksAsString
//
// IEnumString wrapper that formats the stock info into a string.
// The format is [*]<symbol>: (<change>)
// The '*' indicates that the information came from the ISAPI DLL and is
// not real data.  If data for the stock could not be found then <change> becomes
// "<NA>".
//
class CStockUpdateNotify;
class CEnumStocksAsString :
	public CComObjectRootEx<CComObjectThreadModel>,
	public IUnknown
{
public:
	typedef std::vector<LPOLESTR> CStocksAsString;
	typedef _Copy<LPOLESTR>       CCopy;

	CEnumStocksAsString() {}
	~CEnumStocksAsString();

BEGIN_COM_MAP(CEnumStocksAsString)
	COM_INTERFACE_ENTRY(IUnknown)
	COM_INTERFACE_ENTRY_IID(IID_IEnumString, CEnumStocksAsString)
END_COM_MAP()


	STDMETHOD(Next)(ULONG celt, LPOLESTR* rgelt, ULONG* pceltFetched);
	STDMETHOD(Skip)(ULONG celt);
	STDMETHOD(Reset)(void);
	STDMETHOD(Clone)(IEnumString** ppEnum);

	void    Init(CStockList::iterator s, CStockList::iterator e);
	HRESULT Init(CStocksAsString::iterator s, CStocksAsString::iterator e,
				 CStocksAsString::iterator cur);

protected:
	CStocksAsString             m_stocksAsString;
	CStocksAsString::iterator   m_iterCur;

};

//////////////////////////////////////////////////////////////////////////////
// CStockQuotes
//
// Keeps track and manages the stock information.
//

class ATL_NO_VTABLE CStockQuotes :
	public CComObjectRootEx<CComSingleThreadModel>,
	public CComCoClass<CStockQuotes, &CLSID_CoStockQuotes>,
	public IConnectionPointContainerImpl<CStockQuotes>,
	public IDispatchImpl<IStockQuotes, &IID_IStockQuotes, &LIBID_STOCKQUOTESLib>,
	public CProxyIStockEvents<CStockQuotes>,
	public IProvideClassInfo2Impl<&CLSID_CoStockQuotes, &IID_IStockEvents,
								  &LIBID_STOCKQUOTESLib>
{
public:
	CStockQuotes()
	{
		m_sqsList.Init();
		m_pStockUpdateNotify = 0;
		m_bNeedToStopUpdating = false;
		m_pINetSession = 0;
	}
	~CStockQuotes()
	{
	}

	void            FinalRelease();
	HRESULT         FinalConstruct();
	HRESULT         DoUpdate();
	void            NotifyThreadEnding()
	{
		m_pStockUpdateNotify = 0;   // thread has ended so don't access.
	}

DECLARE_REGISTRY_RESOURCEID(IDR_STOCKQUOTES)

BEGIN_COM_MAP(CStockQuotes)
	COM_INTERFACE_ENTRY(IStockQuotes)
	COM_INTERFACE_ENTRY(IDispatch)
	COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
	COM_INTERFACE_ENTRY(IProvideClassInfo2)
END_COM_MAP()

BEGIN_CONNECTION_POINT_MAP(CStockQuotes)
	CONNECTION_POINT_ENTRY(IID_IStockEvents)
END_CONNECTION_POINT_MAP()


// IStockQuotes
public:
	STDMETHOD(GetStockSourceISAPIDllURL)(BSTR* pVal);
	STDMETHOD(SetStockSourceISAPIDllURL)(BSTR newVal);
	STDMETHOD(GetMSInvestorURL)(BSTR* pVal);
	STDMETHOD(SetMSInvestorURL)(BSTR newVal);
	STDMETHOD(PauseUpdating)();
	STDMETHOD(StopUpdating)();
	STDMETHOD(StartUpdating)(int nUpdateInterval);
	STDMETHOD(Load)(IStream* pIStream);
	STDMETHOD(Save)(IStream* pIStream);
	STDMETHOD(StockCount)(int* cnt);
	STDMETHOD(EnumStocks)(IEnumStocks** ppEnum);
	STDMETHOD(EnumAsString)(IEnumString** ppEnum);
	STDMETHOD(Remove)(BSTR bstrSymbol);
	STDMETHOD(Add)(BSTR bstrSymbol);
	STDMETHOD(Update)();
	STDMETHOD(IsUpdating)(BOOL* b) { return *b = g_bUpdating; }

protected:
	CStockList          m_stockList;        // stock info list.
	CSQSList            m_sqsList;          // stock quotes source list.
	CStockUpdateNotify* m_pStockUpdateNotify;   // ptr to thread object.
	bool                m_bNeedToStopUpdating;  // terminate update now.
	CInternetSession*   m_pINetSession;     // inet session.

	void            ShutdownUpdating();
	void            DelSession(bool bCloseFirst = true);
	void            TermNotifyThread();
	void            PrintStocks();      // for debugging.
	void            SaveString(COleStreamFile& strmFile, CString& s);
	void            LoadString(COleStreamFile& strmFile, CString& s);
};

#endif //__STOCKQUOTES_H_

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.日韩大片| 欧美视频精品在线| 欧美人与禽zozo性伦| 精品国产一区二区三区忘忧草 | 中文字幕一区二区日韩精品绯色 | 久久久久久久久久久久久久久99 | 成人国产精品免费观看视频| 国产电影一区二区三区| 国产福利一区在线| 波多野结衣在线一区| av欧美精品.com| 色综合 综合色| 欧美性受xxxx黑人xyx| 欧美色综合影院| 制服丝袜国产精品| 日韩欧美国产综合| 久久人人爽爽爽人久久久| 国产免费成人在线视频| 中文字幕一区视频| 亚洲小说春色综合另类电影| 偷窥国产亚洲免费视频| 久久国产剧场电影| 国产91色综合久久免费分享| 91在线视频免费91| 欧美人动与zoxxxx乱| 精品日韩欧美在线| 中文字幕 久热精品 视频在线| 国产精品大尺度| 一级日本不卡的影视| 蜜桃视频在线观看一区二区| 国产成人在线看| 95精品视频在线| 在线电影一区二区三区| 欧美电视剧免费全集观看| 国产人妖乱国产精品人妖| 一区二区欧美在线观看| 老司机免费视频一区二区三区| 国产精品亚洲一区二区三区妖精| 99re66热这里只有精品3直播| 欧美系列一区二区| 久久先锋影音av| 亚洲日本免费电影| 玖玖九九国产精品| 91亚洲精品乱码久久久久久蜜桃| 91精品国产一区二区三区蜜臀| 国产婷婷精品av在线| 亚洲自拍偷拍综合| 国产精品主播直播| 欧美视频第二页| 日本一二三不卡| 婷婷久久综合九色综合伊人色| 精品一区二区免费| 在线观看亚洲成人| 久久九九全国免费| 亚洲综合一区二区精品导航| 国产尤物一区二区| 欧美日韩亚洲综合| 国产精品三级电影| 久久超碰97中文字幕| 色婷婷av一区二区三区gif| 精品国产一区二区三区久久久蜜月 | 欧美mv日韩mv亚洲| 亚洲综合免费观看高清在线观看| 国产一区二区视频在线播放| 欧美日韩一级视频| 国产精品短视频| 国产一区二区三区高清播放| 欧美中文一区二区三区| 欧美激情资源网| 久久99精品国产麻豆婷婷洗澡| 在线欧美一区二区| 中文字幕av不卡| 国产主播一区二区三区| 欧美日韩国产123区| 亚洲少妇屁股交4| 成人午夜碰碰视频| 精品久久久久久久人人人人传媒 | 久久色视频免费观看| 午夜久久久久久| 91久久精品一区二区三区| 国产精品入口麻豆原神| 国产在线精品一区二区不卡了| 91精品国产综合久久精品| 亚洲国产日日夜夜| 色综合久久综合网欧美综合网| 国产精品午夜在线观看| 国产激情偷乱视频一区二区三区| 日韩限制级电影在线观看| 偷拍自拍另类欧美| 欧美人与性动xxxx| 亚洲.国产.中文慕字在线| 日本道免费精品一区二区三区| 亚洲欧洲一区二区三区| 床上的激情91.| 国产人成亚洲第一网站在线播放| 麻豆国产欧美一区二区三区| 日韩欧美精品三级| 麻豆91在线播放免费| 日韩欧美国产精品一区| 日本中文字幕一区二区视频 | 欧美变态tickle挠乳网站| 99久久伊人精品| 亚洲视频你懂的| 色婷婷综合久久| 亚洲综合丝袜美腿| 欧美日韩小视频| 日韩国产欧美三级| 欧美一区二区播放| 精品在线观看免费| 久久精品人人做| www.性欧美| 一区二区欧美国产| 欧美精选一区二区| 麻豆一区二区在线| 久久免费视频一区| 国产成人免费视频精品含羞草妖精| 久久久久久夜精品精品免费| 国产成人自拍网| 中文字幕佐山爱一区二区免费| 色综合天天综合给合国产| 一区二区三区**美女毛片| 欧美日韩久久久一区| 美脚の诱脚舐め脚责91| 2020国产成人综合网| 不卡的电影网站| 亚洲综合视频在线| 日韩一级高清毛片| 国产福利电影一区二区三区| 国产精品久久久久久户外露出 | 国产一区二区三区四区五区美女 | 色老头久久综合| 免费亚洲电影在线| 久久久国际精品| 日本福利一区二区| 美脚の诱脚舐め脚责91| 亚洲国产成人一区二区三区| 色哟哟国产精品免费观看| 日韩成人一级片| 国产欧美日韩三级| 精品视频免费在线| 国产麻豆精品在线| 一区二区欧美视频| 久久影音资源网| 91精彩视频在线观看| 美女视频黄免费的久久| 中文无字幕一区二区三区| 欧美亚洲日本国产| 国产综合久久久久久久久久久久 | 国产成人免费在线| 亚洲国产精品久久久久秋霞影院| 精品入口麻豆88视频| 色哦色哦哦色天天综合| 另类小说色综合网站| 亚洲日本中文字幕区| 欧美成人精品福利| 91视频.com| 国产在线视频精品一区| 亚洲最大的成人av| 国产日本一区二区| 91精品国产一区二区| 成人av在线网| 另类小说综合欧美亚洲| 亚洲精品乱码久久久久久久久 | 午夜激情久久久| 国产精品的网站| 久久亚洲精品小早川怜子| 欧美日韩一区二区三区视频 | 久久无码av三级| 欧美日本免费一区二区三区| 高清国产午夜精品久久久久久| 日韩精品一二区| 亚洲精品一二三四区| 欧美激情一区在线| 日韩一卡二卡三卡| 欧美性极品少妇| 99免费精品视频| 国产精品资源在线观看| 青青草国产成人99久久| 中文字幕一区二区视频| 久久久午夜精品理论片中文字幕| 538在线一区二区精品国产| 色诱亚洲精品久久久久久| 成人精品一区二区三区四区 | 欧美三区免费完整视频在线观看| 丰满白嫩尤物一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 成人高清视频在线| 国产精品一二一区| 韩国av一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 午夜视频一区二区| 亚洲国产wwwccc36天堂| 亚洲精品va在线观看| 国产精品三级久久久久三级| 国产三级久久久| 国产亚洲1区2区3区| 久久影音资源网| 久久久三级国产网站| 精品国产一区二区三区不卡 | 亚洲gay无套男同|