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

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

?? stockgraph.cpp

?? 股票軟件
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
// StockGraph.cpp : implementation of the CStockGraph class
//

#include "stdafx.h"

#include "StockGraph.h"
#include <math.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// Some Useful static function

void DrawLine( CDC * pDC, int nWidth, COLORREF clr, int xStart, int yStart, int xEnd, int yEnd )
{
	CPen	pen( PS_SOLID, nWidth, clr );
	CPen *pOldPen = pDC->SelectObject( &pen );
	pDC->MoveTo( xStart, yStart );
	pDC->LineTo( xEnd, yEnd );
	pDC->SelectObject( pOldPen );
}

void DrawDashLine( CDC * pDC, int nWidth, COLORREF clr, int xStart, int yStart, int xEnd, int yEnd )
{
	CPen	pen( PS_SOLID, nWidth, clr );
	CPen *pOldPen = pDC->SelectObject( &pen );
	int	x = xStart, y = yStart;
	while( x < xEnd || y < yEnd )
	{
		if( x > xEnd )	x	=	xEnd;
		if( y > yEnd )	y	=	yEnd;
		pDC->MoveTo( x, y );
		int	xNew = x+3;
		int	yNew = y+3;
		if( xNew > xEnd )	xNew	=	xEnd;
		if( yNew > yEnd )	yNew	=	yEnd;
		pDC->LineTo( xNew, yNew );
		x	=	xNew+3;
		y	=	yNew+3;
	}
	pDC->SelectObject( pOldPen );
}

void DrawDashAxis( CDC * pDC, int nWidth, COLORREF clr, int nCount, int xStart, int yStart, int xEnd, int yEnd )
{
	int	nHeight	=	yEnd - yStart;
	if( nHeight <= 0 )
		return;
	if( nCount <= 0 )
		return;
	for( int k=0; k<nCount; k++ )
		DrawDashLine( pDC, nWidth, clr, xStart, yStart+k*nHeight/nCount, xEnd, yStart+k*nHeight/nCount );
}

void DrawAxisNumber(CDC * pDC, COLORREF clr, int nCount,
					int xStart, int yStart, int xEnd, int yEnd,
					double fMin, double fMax, BOOL bDrawMin, BOOL bDrawMax, int nDotCount )
{
	int	nHeight	=	yEnd - yStart;
	if( nHeight <= 0 )
		return;
	if( nCount <= 0 )
		return;
	ASSERT( nDotCount >= 0 );

	CString	strFmt;
	strFmt.Format( "%%.%df", nDotCount );

	pDC->SetTextColor( clr );
	CString	strText;
	CSize	sizeText;
	
	for( int k=0; k<=nCount; k++ )
	{
		if( !bDrawMin && 0 == k )
			continue;
		if( !bDrawMax && nCount == k )
			continue;
		double	dTemp	=	fMin+k*(fMax-fMin)/nCount;
		if( dTemp < 0 && dTemp > (0-0.6*pow((double)10,0-nDotCount)) )
			dTemp	=	0;
		strText.Format( strFmt, dTemp );
		sizeText	=	pDC->GetTextExtent( strText );
		pDC->TextOut( xStart-sizeText.cx-1, yStart+(nCount-k)*nHeight/nCount-7, strText );
	}
}

BOOL DrawAxis(CDC * pDC, CRect rect, int nMarginTop, int nAxisLines, double dMin, double dMax, BOOL bDrawMin, BOOL bDrawMax, int nDotCount )
{
	DECLARE_COLOR_DEFINATION

	if( rect.Height() <= nMarginTop )
		return FALSE;

	// Draw Axis
	pDC->Draw3dRect( &rect, clrBorder, clrBorder );
	DrawDashAxis(	pDC, 1, clrBorder, nAxisLines,
					rect.left, rect.top+nMarginTop, rect.right, rect.bottom );

	// Draw Axis Number, Will Extent the rect
	pDC->SetBkColor( clrBK );
	DrawAxisNumber( pDC, clrText, nAxisLines,
					rect.left, rect.top+nMarginTop, rect.right, rect.bottom,
					dMin, dMax, bDrawMin, bDrawMax, nDotCount );
	return TRUE;
}

BOOL DrawTechTitle(CDC * pDC, int x, int y, LPCTSTR lpszText,
				   UINT nTextAlign, int nFontSize, COLORREF clrBK, COLORREF clrText )
{
	pDC->SetBkColor( clrBK );
	pDC->SetTextColor( clrText );
	UINT nOldAlign = pDC->SetTextAlign( nTextAlign );
	pDC->TextOut( x, y, lpszText );
	pDC->SetTextAlign( nOldAlign );
	return TRUE;
}

BOOL FixRect( CRect & rect, LPRECT lpRectMax )
{
	if( lpRectMax )
	{
		if( rect.left < lpRectMax->left )
			rect.left	=	lpRectMax->left;
		if( rect.top < lpRectMax->top )
			rect.top	=	lpRectMax->top;
		if( rect.right > lpRectMax->right )
			rect.right	=	lpRectMax->right;
		if( rect.bottom > lpRectMax->bottom )
			rect.bottom	=	lpRectMax->bottom;
		return TRUE;
	}
	return FALSE;
}

BOOL DrawTextWithRect(CDC *pDC, int left, int top, int right, int bottom, LPCTSTR lpszText,
					  COLORREF clrRect, COLORREF clrText, COLORREF clrBK, LPRECT lpRectMax )
{
	CRect	rectDraw	=	CRect( left, top, right, bottom );
	if( lpRectMax )
		FixRect( rectDraw, lpRectMax );
	pDC->Draw3dRect( &rectDraw, clrRect, clrRect );
	pDC->SetTextColor( clrText );
	pDC->SetBkColor( clrBK );
	pDC->DrawText( lpszText, rectDraw, DT_CENTER | DT_VCENTER | DT_SINGLELINE );
	return TRUE;
}

BOOL DrawTextWithRect(CDC *pDC, int left, int top, int right, int bottom, UINT nIDString,
					  COLORREF clrRect, COLORREF clrText, COLORREF clrBK, LPRECT lpRectMax )
{
	CString	string;
	string.LoadString( nIDString );
	return DrawTextWithRect( pDC, left, top, right, bottom, string, clrRect, clrText, clrBK, lpRectMax );
}

/////////////////////////////////////////////////////////////////////////////
// CStockGraph

CStockGraph::CStockGraph( )
{
	ResetMargins( );

	m_pParent		=	NULL;
	m_nThickness	=	m_nDefaultThickness;
	m_dwLatestDate		=	-1;

	m_ptSelectBegin	=	CPoint(0,0);
	m_ptSelectEnd	=	CPoint(0,0);

	m_nReportWhat	=	CStockGraph::reportParam;

	SetKType( );
	SetKFormat( AfxGetProfile().GetGraphKFormat() );
	SetMaindataType( AfxGetProfile().GetGraphMaindataType() );
#ifdef	CLKLAN_ENGLISH_US
	SetKLineMode( CStockGraph::klineAmerica );
#else
	SetKLineMode( CStockGraph::klineCandle );
#endif
	ResetIndex( );

	m_rectAll.SetRectEmpty();

	m_dMaxPrice			=	0;
	m_dMinPrice			=	0;

	m_bCursorBorder		=	FALSE;

	m_nSelectedTechID	=	STT_INVALID;
}

CStockGraph::~CStockGraph( )
{
	ClearCurStock( );
}

void CStockGraph::SetParent( CWnd * pParent )
{
	m_pParent	=	pParent;
}

void CStockGraph::ResetMargins(	int nMarginTop, int nMarginBottom,
								int nHeightSubtitle, int nWidthSubtitle,
								int nWidthParameter, int nDefaultThickness )
{
	ASSERT( nMarginTop >= 0 && nMarginBottom >= 0 );
	ASSERT( nHeightSubtitle >= 0 && nWidthSubtitle >= 0 );
	ASSERT( nWidthParameter >= 0 );
	ASSERT( nDefaultThickness > 0 );

	m_nMarginTop		=	nMarginTop;
	m_nMarginBottom		=	nMarginBottom;
	m_nHeightSubtitle	=	nHeightSubtitle + 2;
	m_nWidthSubtitle	=	nWidthSubtitle;
	m_nWidthParameter	=	nWidthParameter;
	m_nDefaultThickness	=	nDefaultThickness;
}

LRESULT CStockGraph::OnStkReceiverData( WPARAM wParam, LPARAM lParam )
{
	PCOMMPACKET	pCommPacket	=	(PCOMMPACKET)lParam;

	switch( wParam )
	{
	case CStock::dataReport:
		if( pCommPacket && CStock::dataReport == pCommPacket->m_dwDataType )
		{
			DWORD i;
			for( i=0; i<pCommPacket->m_dwCount; i++ )
			{
				if( m_CurStock.GetStockInfo().IsEqualTo( pCommPacket->m_pReport[i].m_dwMarket, pCommPacket->m_pReport[i].m_szCode ) )
					break;
			}
			if( i != pCommPacket->m_dwCount )
			{
				// 加入最新一天的K線數(shù)據(jù)
				PrepareStockData( TRUE );
				if( m_pParent && ::IsWindow(m_pParent->GetSafeHwnd()) )
					m_pParent->Invalidate();
			}
		}
		break;
	case CStock::dataK:
		if( pCommPacket && CStock::dataK == pCommPacket->m_dwDataType )
		{
			DWORD i;
			for( i=0; i<pCommPacket->m_dwCount; i++ )
			{
				if( m_CurStock.GetStockInfo().IsEqualTo( pCommPacket->m_pKdata[i].m_dwMarket, pCommPacket->m_pKdata[i].m_szCode ) )
					break;
			}
			if( i != pCommPacket->m_dwCount )
			{
				// 加入最新一天的K線數(shù)據(jù)
				PrepareStockData( TRUE );
				if( m_pParent && ::IsWindow(m_pParent->GetSafeHwnd()) )
					m_pParent->Invalidate();
			}
		}
		break;
	case CStock::dataMinute:
		// WILLCHECK
		if( !CKData::IsDayOrMin(m_nCurKType) && pCommPacket && CStock::dataMinute == pCommPacket->m_dwDataType )
		{
			int	nOldSize	=	m_CurStock.GetMinute().GetSize();
			DWORD i;
			for(i=0; i<pCommPacket->m_dwCount; i++)
			{
				if( m_CurStock.GetStockInfo().IsEqualTo( pCommPacket->m_pMinute[i].m_dwMarket, pCommPacket->m_pMinute[i].m_szCode ) )
					break;
			}
			if( i != pCommPacket->m_dwCount )
			{
				// 加入最新的分鐘K線數(shù)據(jù)
				PrepareStockData( TRUE );
				if( m_pParent && ::IsWindow(m_pParent->GetSafeHwnd()) )
					m_pParent->Invalidate();
			}
		}
		break;
	}

	return 0L;
}

int CStockGraph::GetKType( )
{
	return m_nCurKType;
}

void CStockGraph::SetKType( int ktype )
{
	m_nCurKType	=	ktype;
	PrepareStockData( );
}

int CStockGraph::GetKFormat( )
{
	return m_nCurKFormat;
}

void CStockGraph::SetKFormat( int kformat )
{
	m_nCurKFormat	=	kformat;
	AfxGetProfile().SetGraphKFormat( kformat );
	PrepareStockData( );
}

int CStockGraph::GetMaindataType( )
{
	return m_nCurMaindataType;
}

void CStockGraph::SetMaindataType( int maindatatype )
{
	m_nCurMaindataType	=	maindatatype;
	AfxGetProfile().SetGraphMaindataType( maindatatype );
	PrepareStockData( );
}

int CStockGraph::GetKLineMode( )
{
	return m_nCurKLineMode;
}

void CStockGraph::SetKLineMode( int klineMode )
{
	m_nCurKLineMode	=	klineMode;
}

CRect & CStockGraph::GetKDataRect( )
{
	return m_rectKData;
}

void CStockGraph::ResetIndexCurrent( int nIndexCurrent )
{
	m_nIndexCurrent	=	nIndexCurrent;
	m_anIndexCurrent.RemoveAll();
}

void CStockGraph::ResetIndex( int nIndexStart, int nIndexEnd, int nIndexCurrent )
{
	m_nIndexStart	=	nIndexStart;
	m_nIndexEnd		=	nIndexEnd;
	m_nIndexCurrent	=	nIndexCurrent;
	m_anIndexCurrent.RemoveAll();
}

void CStockGraph::ResetClient( CRect rectAll )
{
	if( rectAll.IsRectEmpty() )
		return;

	m_rectAll	=	rectAll;
	if( m_rectAll.IsRectEmpty() )
		return;

	//	The Left Side m_rectKData
	m_rectKData.top		=	m_rectAll.top + m_nMarginTop+m_nMarginTop;
	m_rectKData.left	=	m_rectAll.left+1;
	m_rectKData.bottom	=	m_rectKData.top + 313;
	m_rectKData.right	=	m_rectKData.left + 82;

	// The Right Side m_rectReport
	m_rectReport.top	=	m_rectAll.top + m_nMarginTop+7;
	m_rectReport.left	=	m_rectAll.right - 174;
	m_rectReport.bottom	=	m_rectAll.bottom - m_nMarginBottom;
	m_rectReport.right	=	m_rectAll.right;

	// The Center m_rectKLine
	CSPDWordArray	& anTech	=	AfxGetProfile().GetGraphTechsShow();
	int	nTechCount	=	anTech.GetSize();
	int	nUnit		=	(int)( (m_rectAll.Height()-m_nMarginTop-m_nMarginBottom) / (nTechCount+1.8) );
	m_rectKLine.top		=	m_rectAll.top + m_nMarginTop;
	m_rectKLine.left	=	m_rectKData.right+1;
	m_rectKLine.bottom	=	m_rectKLine.top + m_rectAll.Height() - m_nMarginTop - m_nMarginBottom - nUnit*nTechCount;
	m_rectKLine.right	=	m_rectAll.right-m_rectReport.Width()-1;

	// The m_rectKLineCenter
	m_rectKLineCenter	=	m_rectKLine;
	m_rectKLineCenter.InflateRect( -2, -m_nHeightSubtitle, -2, -2 );

	// The m_arcTech
	m_arcTech.RemoveAll();
	int	nLastBottom = m_rectKLine.bottom;
	for( int k=0; k<anTech.GetSize(); k++ )
	{
		CRect	rectTech;
		rectTech.top		=	nLastBottom;
		rectTech.left		=	m_rectKLine.left;
		rectTech.bottom		=	rectTech.top + nUnit;
		rectTech.right		=	m_rectKLine.right;
		nLastBottom			=	rectTech.bottom;
		m_arcTech.Add( rectTech );
	}

	// The m_rectCenter
	m_rectCenter	=	m_rectKLine;
	m_rectCenter.bottom	=	m_rectAll.bottom;
}

void CStockGraph::ClearTechniqueCache( )
{
	m_techparam.Clear();
	for( int i=0; i<m_aptrTechUser.GetSize(); i++ )
	{
		CTechUser * pTechUser = (CTechUser *)m_aptrTechUser.GetAt(i);
		if( pTechUser )
			delete	pTechUser;
	}
	m_aptrTechUser.RemoveAll();
}

void CStockGraph::ClearCurStock( )
{
	ClearTechniqueCache( );
	m_CurStock.Clear();
	m_CurStockDown.Clear();
}

BOOL CStockGraph::SetCurStock( const char * szCode )
{
	if( NULL == szCode || strlen(szCode) <= 0 )
	{
		ASSERT( FALSE );
		return FALSE;
	}

	CStockInfo	info;
	if( !AfxGetStockContainer().GetStockInfo( szCode, &info ) )
	{
		ASSERT( FALSE );
		return FALSE;
	}

	return SetCurStock( info );
}

BOOL CStockGraph::SetCurStock( CStockInfo & info )
{
	if( m_CurStock.GetStockInfo().IsEqualTo( info.GetMarket(), info.GetStockCode() ) )
	{
		return TRUE;
	}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本成人在线不卡视频| 中文字幕一区三区| 日本麻豆一区二区三区视频| 欧美性淫爽ww久久久久无| 一区二区激情视频| 欧美精品日日鲁夜夜添| 麻豆精品精品国产自在97香蕉| 精品欧美乱码久久久久久1区2区| 狠狠网亚洲精品| 国产欧美日韩不卡| 色婷婷激情久久| 日韩电影免费一区| 久久婷婷色综合| 91影视在线播放| 亚洲成人三级小说| 2017欧美狠狠色| 99精品视频中文字幕| 亚洲国产一区二区视频| 日韩精品一区二区三区在线观看| 国产成人免费在线| 一区二区三区久久| 精品国产91乱码一区二区三区 | 色综合色狠狠综合色| 一二三四社区欧美黄| 666欧美在线视频| 国产 日韩 欧美大片| 亚洲已满18点击进入久久| 日韩欧美一区在线观看| 成人激情免费电影网址| 天天免费综合色| 国产欧美一二三区| 精品视频在线免费| 国产成人在线视频网站| 亚洲福利一区二区三区| 日韩欧美一区在线| 99精品视频一区二区三区| 日本欧美在线观看| 亚洲日本va午夜在线影院| 日韩欧美的一区| 色婷婷av一区二区三区大白胸| 日韩高清不卡一区| 亚洲欧美在线另类| 精品久久久久av影院| 99久久99久久久精品齐齐| 日产欧产美韩系列久久99| 中文字幕一区二区三区在线不卡 | 欧美tickling挠脚心丨vk| 北条麻妃一区二区三区| 免费欧美高清视频| 亚洲精品成a人| 国产欧美日韩三级| 日韩三级伦理片妻子的秘密按摩| 97国产精品videossex| 九九久久精品视频| 亚洲电影一级片| 亚洲精品免费电影| 久久久亚洲欧洲日产国码αv| 91国产成人在线| av爱爱亚洲一区| 精品一区二区三区免费| 亚洲一卡二卡三卡四卡五卡| 国产精品天天摸av网| 久久久亚洲精华液精华液精华液 | 91精品国产综合久久久久| 99久久99久久综合| 成人性视频网站| 国产精品一区二区男女羞羞无遮挡| 日韩精品三区四区| 亚洲国产成人av好男人在线观看| 18涩涩午夜精品.www| 欧美国产97人人爽人人喊| 久久美女高清视频| 久久久久亚洲综合| 日韩欧美卡一卡二| 日韩免费高清av| 日韩你懂的电影在线观看| 欧美一区二区不卡视频| 9191成人精品久久| 91精品国产入口| 日韩午夜电影在线观看| 在线综合+亚洲+欧美中文字幕| 欧美精选在线播放| 91精品综合久久久久久| 欧美久久久久久久久中文字幕| 在线观看91av| wwwwww.欧美系列| 国产亚洲欧美色| 欧美激情一区二区在线| 国产精品欧美一级免费| 国产精品成人免费精品自在线观看| 国产精品私房写真福利视频| 亚洲欧美自拍偷拍| 亚洲一区二区3| 另类小说图片综合网| 国产精品香蕉一区二区三区| 成人av影院在线| 91成人在线观看喷潮| 欧美嫩在线观看| 日韩欧美在线网站| 久久精品亚洲麻豆av一区二区| 国产欧美精品日韩区二区麻豆天美| 中文字幕一区二区三区av| 亚洲视频狠狠干| 日日夜夜一区二区| 国模一区二区三区白浆| av电影在线观看完整版一区二区| 欧美午夜精品一区| 精品久久人人做人人爽| 国产拍欧美日韩视频二区| 亚洲免费伊人电影| 天堂va蜜桃一区二区三区| 国产精品自拍网站| 91女神在线视频| 日韩精品一区二区三区老鸭窝| 亚洲精品午夜久久久| 午夜影院久久久| 国产九色精品成人porny| 91在线观看高清| 欧美电影免费观看高清完整版 | 三级亚洲高清视频| 国产精品99久久久久久有的能看| 处破女av一区二区| 欧美日韩一二三区| 久久精品视频一区| 亚洲一卡二卡三卡四卡无卡久久| 久国产精品韩国三级视频| 99在线精品一区二区三区| 欧美一区二区精品| 亚洲丝袜精品丝袜在线| 免费视频一区二区| 色拍拍在线精品视频8848| 精品国产乱码久久久久久免费| 亚洲人精品一区| 国产一区二区三区电影在线观看 | 成人精品国产福利| 91精品国产综合久久精品图片| 国产精品国产三级国产三级人妇| 亚洲成a天堂v人片| www.亚洲人| 欧美精品一区二区三区视频| 亚洲国产精品尤物yw在线观看| 国产精品18久久久久| 欧美日韩国产首页在线观看| 中日韩av电影| 国产高清不卡一区| 日韩三级免费观看| 三级不卡在线观看| 日本韩国欧美在线| 中文字幕在线视频一区| 韩国av一区二区三区四区| 欧美日韩免费在线视频| 国产精品久久久久精k8| 激情综合色综合久久| 欧美高清视频在线高清观看mv色露露十八| 国产精品久久国产精麻豆99网站| 国产一区二区免费视频| 日韩一区二区影院| 日韩成人午夜精品| 欧美美女喷水视频| 亚洲成人你懂的| 欧美日本在线看| 天堂一区二区在线免费观看| 欧美日韩五月天| 亚洲va天堂va国产va久| 91一区二区在线| 一区av在线播放| 欧美性一二三区| 亚洲 欧美综合在线网络| 色噜噜久久综合| 亚洲曰韩产成在线| 日本黄色一区二区| 亚洲国产综合人成综合网站| 欧美色网站导航| 免费在线看一区| 久久婷婷国产综合国色天香| 国产大陆精品国产| 中文字幕精品—区二区四季| 国产精品一二三区在线| 国产欧美精品国产国产专区| 丰满少妇久久久久久久| 国产精品成人在线观看| 色吊一区二区三区| 天涯成人国产亚洲精品一区av| 日韩一级黄色片| 国产成人精品三级麻豆| 欧美经典一区二区| aaa欧美色吧激情视频| 亚洲精品免费在线播放| 欧美日本在线播放| 韩国v欧美v亚洲v日本v| 国产精品久久久久国产精品日日| 一本大道久久a久久综合 | 五月天久久比比资源色| 91精品国产高清一区二区三区 | 三级影片在线观看欧美日韩一区二区| 欧美一区二区三区的| 国产一区二区免费在线| 亚洲色图清纯唯美| 91精品国产91热久久久做人人| 91在线视频官网|