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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stockgraph.cpp

?? 股票軟件
?? CPP
?? 第 1 頁 / 共 5 頁
字號:

	ResetIndex( );
	ClearCurStock( );
	m_CurStock.SetStockInfo( &info );
	m_CurStock.SetDatabase( &AfxGetDB() );
	m_CurStockDown.SetStockInfo( &info );
	m_CurStockDown.SetDatabase( &AfxGetDB() );
	m_dwLatestDate		=	-1;
	
	return TRUE;
}

void CStockGraph::SetReportWhat( int nReportWhat )
{
	m_nReportWhat	=	nReportWhat;
}

BOOL CStockGraph::PrepareStockData( BOOL bReload )
{
	if( !m_CurStock.GetStockInfo().IsValidStock() )
		return FALSE;

	CStockInfo	info;
	if( AfxGetStockContainer().GetStockInfo( m_CurStock.GetStockCode(), &info )
		&& m_CurStock.GetStockInfo().IsEqualTo( info.GetMarket(), info.GetStockCode() ) )
	{
		m_CurStock.SetStockInfo( &info );
		m_CurStockDown.SetStockInfo( &info );
	}

	int nOldSize = m_CurStock.GetKData(m_nCurKType).GetSize();

	// Prepare Data
	AfxPrepareStockData( &AfxGetDB(), m_CurStock, m_nCurKType, m_nCurKFormat, m_nCurMaindataType, FALSE, bReload );
	AfxPrepareStockData( &AfxGetDB(), m_CurStockDown, m_nCurKType, CKData::formatXDRdown, m_nCurMaindataType, FALSE, bReload );

	if( m_CurStock.GetKData(m_nCurKType).GetSize() != nOldSize )
		ResetIndex( );

	AfxGetStkReceiver().RequestKData( &m_CurStock, m_nCurKType );

	m_techparam.Clear( );
	m_techparam.SetKData( &(m_CurStockDown.GetKData(m_nCurKType)) );
	m_techparam.volume.SetKData( &(m_CurStock.GetKData(m_nCurKType)) );
	m_techparam.ma.SetKData( &(m_CurStock.GetKData(m_nCurKType)) );
	m_techparam.bbi.SetKData( &(m_CurStock.GetKData(m_nCurKType)) );
	m_techparam.boll.SetKData( &(m_CurStock.GetKData(m_nCurKType)) );
	m_techparam.pv.SetKData( &(m_CurStock.GetKData(m_nCurKType)) );
	m_techparam.sar.SetKData( &(m_CurStock.GetKData(m_nCurKType)) );
	m_techparam.dj.SetKData( &(m_CurStock.GetKData(m_nCurKType)) );
	m_techparam.mike.SetKData( &(m_CurStock.GetKData(m_nCurKType)) );

	return TRUE;
}

void CStockGraph::Redraw( CDC * pDC, CRect rectAll )
{
	ASSERT( m_pParent && ::IsWindow( m_pParent->GetSafeHwnd() ) );
	if( m_rectAll != rectAll )
		ResetClient( rectAll );
	DrawStock( pDC );
}

void CStockGraph::DrawReportRegion( CDC * pDC )
{
	ASSERT( m_pParent && ::IsWindow( m_pParent->GetSafeHwnd() ) );
	if( !m_pParent || !::IsWindow(m_pParent->GetSafeHwnd()) )
		return;

	CClientDC	dc(m_pParent);
	if( NULL == pDC )
		pDC		=	&dc;

	switch( m_nReportWhat )
	{
	case CStockGraph::reportParam:		DrawReportParam( pDC );		break;
	case CStockGraph::reportCost:		DrawReportCost( pDC );		break;
	case CStockGraph::reportFlame:		DrawReportFlame( pDC );		break;
	case CStockGraph::reportActivity:	DrawReportActivity( pDC );	break;
	}
}

int CStockGraph::GetNextThickness( int nCurrentThickness, BOOL bAsc )
{
	if( bAsc )
	{
		switch( nCurrentThickness )
		{
		case 1:			return 2;
		case 2:			return 4;
		case 4:			return 5;
		case 5:			return 6;
		case 6:			return 7;
		case 7:			return 9;
		case 9:			return 10;
		case 10:		return 13;
		case 13:		return 15;
		case 15:		return 15;
		default:
			ASSERT( FALSE );
			return m_nDefaultThickness;
		}
	}
	else
	{
		switch( nCurrentThickness )
		{
		case 1:			return 1;
		case 2:			return 1;
		case 4:			return 2;
		case 5:			return 4;
		case 6:			return 5;
		case 7:			return 6;
		case 9:			return 7;
		case 10:		return 9;
		case 13:		return 10;
		case 15:		return 13;
		default:
			ASSERT( FALSE );
			return m_nDefaultThickness;
		}
	}
}

void CStockGraph::ExpandUp( BOOL bShiftPressed )
{
	if( m_nIndexCurrent >= 0 )
	{
		CKData	&kdata	=	m_CurStock.GetKData( m_nCurKType );
		if( m_nIndexCurrent < kdata.GetSize() )
		{	
			if( -1 != m_dwLatestDate && kdata.ElementAt(m_nIndexCurrent).m_date > m_dwLatestDate )
			{
				KDATA	&	kd	=	kdata.ElementAt(m_nIndexCurrent);
				if( bShiftPressed )
				{
					float	fIncrease	=	100000;
					fIncrease	=	( kd.m_fVolume/10 > fIncrease ? kd.m_fVolume/10 : fIncrease );
					kd.m_fVolume	+=	fIncrease;
					kd.m_fAmount	=	( kd.m_fVolume*(kd.m_fOpen+kd.m_fClose)/2 );
				}
				else
				{
					float	fIncrease	=	(float)0.001;
					fIncrease	=	(float)( kd.m_fClose/500 > fIncrease ? kd.m_fClose/500 : fIncrease );
					kd.m_fClose		+=	fIncrease;
					kd.m_fOpen		+=	fIncrease;
					kd.m_fHigh		+=	fIncrease;
					kd.m_fLow		+=	fIncrease;
				}
				DrawStock( NULL );
				return;
			}
		}
	}

	int nOld = m_nThickness;
	m_nThickness = GetNextThickness( m_nThickness, TRUE );
	if( nOld != m_nThickness )
		DrawStock( NULL );
}

void CStockGraph::ExpandDown( BOOL bShiftPressed )
{
	if( m_nIndexCurrent >= 0 )
	{
		CKData	&kdata	=	m_CurStock.GetKData( m_nCurKType );
		if( m_nIndexCurrent < kdata.GetSize() )
		{	
			if( -1 != m_dwLatestDate && kdata.ElementAt(m_nIndexCurrent).m_date > m_dwLatestDate )
			{
				KDATA	&	kd	=	kdata.ElementAt(m_nIndexCurrent);
				if( bShiftPressed )
				{
					float	fDecline	=	100000;
					fDecline		=	( kd.m_fVolume/10 > fDecline ? kd.m_fVolume/10 : fDecline );
					if( kd.m_fVolume > fDecline )
						kd.m_fVolume	-=	fDecline;
					kd.m_fAmount	=	(float)( kd.m_fVolume*(kd.m_fOpen+kd.m_fClose)/2 );
				}
				else
				{
					float	fDecline	=	(float)0.001;
					fDecline	=	(float)( kd.m_fClose/500 > fDecline ? kd.m_fClose/500 : fDecline );
					if( kd.m_fLow > fDecline )
					{
						kd.m_fClose		-=	fDecline;
						kd.m_fOpen		-=	fDecline;
						kd.m_fHigh		-=	fDecline;
						kd.m_fLow		-=	fDecline;
					}
				}
				DrawStock( NULL );
				return;
			}
		}
	}

	int nOld = m_nThickness;
	m_nThickness = GetNextThickness( m_nThickness, FALSE );
	if( nOld != m_nThickness )
		DrawStock( NULL );
}

void CStockGraph::MoveLeft( BOOL bShiftPressed )
{
	Move( -1, bShiftPressed, FALSE );
}

void CStockGraph::MoveRight( BOOL bShiftPressed )
{
	if( m_nIndexCurrent >= 0 && bShiftPressed )
	{
		CKData	&kdata	=	m_CurStock.GetKData( m_nCurKType );
		if( m_nIndexCurrent+1 >= kdata.GetSize() )
		{	
			//	Add New KDATA to test predicate
			if( 0 == kdata.GetSize() )
				m_dwLatestDate	=	0;
			else if( -1 == m_dwLatestDate )
				m_dwLatestDate	=	kdata.ElementAt(kdata.GetSize()-1).m_date;
			KDATA	kd;
			memset( &kd, 0, sizeof(kd) );
			if( kdata.GetSize() > 0 )
				kd	=	kdata.ElementAt(kdata.GetSize()-1);
			else
				kd.m_fClose	=	1;
			kd.m_fOpen	=	kd.m_fHigh	=	kd.m_fLow	=	kd.m_fClose;
			kd.m_date	=	CSPTime::GetStockTimeNext( kd.m_date, m_nCurKType );
			kdata.Add( kd );
			m_CurStockDown.GetKData( m_nCurKType ).Add( kd );
			
			bShiftPressed	=	FALSE;
		}
	}

	Move( 1, bShiftPressed, FALSE );
}

void CStockGraph::PageLeft( BOOL bShiftPressed )
{
	int	nMove	=	-(m_nIndexEnd-m_nIndexStart-5);
	if( nMove >= 0 )
		nMove	=	-1;
	Move( nMove, bShiftPressed, FALSE );
}

void CStockGraph::PageRight( BOOL bShiftPressed )
{
	int	nMove	=	(m_nIndexEnd-m_nIndexStart-5);
	if( nMove <= 0 )
		nMove	=	1;
	Move( nMove, bShiftPressed, FALSE );
}

void CStockGraph::MoveHome( BOOL bShiftPressed )
{
	if( m_nIndexCurrent >= 0 )
	{
		// Move Current Selection
		int	nPos	=	m_nIndexStart;
		MoveTo( nPos, bShiftPressed, FALSE );
	}
	else
	{
		// Show Prev Technique Line
		UINT	nTechUserCount	=	CTechUser::GetTechUserCount();
		UINT	nTechMax	=	STT_MAX;
		if( nTechUserCount > 0 )
			nTechMax	=	STT_USER_MIN + nTechUserCount - 1;

		CSPDWordArray	& auShow	=	AfxGetProfile().GetGraphTechsShow();
		int	nOldSize = auShow.GetSize();
		if( auShow.GetSize() > 0 )
		{
			UINT	nNext	=	auShow.ElementAt(auShow.GetSize()-1);
			nNext	--;
			if( nNext < STT_TREND_MIN || nNext > nTechMax )
				nNext	=	nTechMax;
			if( nNext > STT_MAX && nNext < STT_USER_MIN )
				nNext	=	STT_MAX;
			AfxGetProfile().ShowGraphViewTech( nNext );
		}
		else
		{
			auShow.Add( nTechMax );
		}
		if( auShow.GetSize() == nOldSize )
			InvalidateCenter( );
		else if( m_pParent && ::IsWindow(m_pParent->GetSafeHwnd()) )
		{
			ResetClient( m_rectAll );
			m_pParent->Invalidate();
		}
	}
}

void CStockGraph::MoveEnd( BOOL bShiftPressed )
{
	if( m_nIndexCurrent >= 0 )
	{
		// Move Current Selection
		CKData	& kdata	=	m_CurStock.GetKData( m_nCurKType );
		int	nPos	=	( m_nIndexEnd < 0 ? kdata.GetSize()-1 : m_nIndexEnd );
		MoveTo( nPos, bShiftPressed, FALSE );
	}
	else
	{
		// Show Next Technique Line
		UINT	nTechUserCount	=	CTechUser::GetTechUserCount();
		UINT	nTechMax	=	STT_MAX;
		if( nTechUserCount > 0 )
			nTechMax	=	STT_USER_MIN + nTechUserCount - 1;

		CSPDWordArray	& auShow	=	AfxGetProfile().GetGraphTechsShow();
		int nOldSize = auShow.GetSize();
		if( auShow.GetSize() > 0 )
		{
			UINT	nNext	=	auShow.ElementAt(auShow.GetSize()-1);
			nNext	++;
			if( nNext < STT_TREND_MIN || nNext > nTechMax )
				nNext	=	STT_TREND_MIN;
			if( nNext > STT_MAX && nNext < STT_USER_MIN )
				nNext	=	STT_USER_MIN;
			AfxGetProfile().ShowGraphViewTech( nNext );
		}
		else
		{
			auShow.Add( STT_TREND_MIN );
		}
		if( auShow.GetSize() == nOldSize )
			InvalidateCenter( );
		else if( m_pParent && ::IsWindow(m_pParent->GetSafeHwnd()) )
		{
			ResetClient( m_rectAll );
			m_pParent->Invalidate();
		}
	}
}

void CStockGraph::OnInsert( )
{
	CKData	&kdata	=	m_CurStock.GetKData( m_nCurKType );

	KDATA	kd;
	memset( &kd, 0, sizeof(kd) );
	if( kdata.GetSize() > 0 )
		kd	=	kdata.ElementAt(kdata.GetSize()-1);
	else
		kd.m_fClose	=	1;
	kd.m_fOpen	=	kd.m_fHigh	=	kd.m_fLow	=	kd.m_fClose;
	kd.m_date	=	CSPTime::GetStockTimeNext( kd.m_date, m_nCurKType );

	if( m_pParent && ::IsWindow( m_pParent->GetSafeHwnd() ) )
		m_pParent->SetFocus( );
}

void CStockGraph::OnLButtonDown( UINT nFlags, CPoint point, BOOL bShiftPressed, BOOL bCtrlPressed )
{
	// Border Move
	if( m_bCursorBorder )
	{
		SetCapture(m_pParent->GetSafeHwnd());
		// Draw Border Moving Line
		DrawBorderMovingLine( NULL, point, TRUE );
		m_ptLastMovingLine	=	point;
		return;
	}

	// KLine Index
	int	nIndexClick	=	GetIndexClick( point );
	MoveTo( nIndexClick, bShiftPressed, bCtrlPressed );

	// Selection Rect
	if( -1 != nIndexClick && m_rectKLineCenter.PtInRect(point) )
	{
		SetCapture(m_pParent->GetSafeHwnd());
		m_ptSelectBegin	=	point;
		m_ptSelectEnd	=	point;
		DrawSelectionRect( NULL, m_ptSelectBegin, m_ptSelectEnd, TRUE );
	}

	// Selected TechID
	SelectTechID( point );
}

void CStockGraph::OnLButtonUp( UINT nFlags, CPoint point, BOOL bShiftPressed, BOOL bCtrlPressed )
{
	if( m_bCursorBorder && GetCapture() == m_pParent->GetSafeHwnd() )
	{
		ReleaseCapture( );
		// Remove Border Moving Line
		DrawBorderMovingLine( NULL, point, FALSE );
		// Reset Border
		if( 0 == m_nPosSelectBorder )
		{
			m_rectKLine.bottom	=	point.y;
			m_rectKLineCenter	=	m_rectKLine;
			m_rectKLineCenter.InflateRect( -2, -m_nHeightSubtitle, -2, -2 );
			if( m_arcTech.GetSize() > 0 )
				m_arcTech.ElementAt(0).top	=	point.y;
		}
		else if( m_nPosSelectBorder > 0 )
		{
			if( m_nPosSelectBorder < m_arcTech.GetSize() )
			{
				m_arcTech.ElementAt(m_nPosSelectBorder-1).bottom	=	point.y;
				m_arcTech.ElementAt(m_nPosSelectBorder).top			=	point.y;
			}
		}

		m_bCursorBorder = FALSE;
		DrawStock( NULL );
		return;
	}

	if( GetCapture() == m_pParent->GetSafeHwnd() )
	{
		ReleaseCapture( );
		DrawSelectionRect( NULL, m_ptSelectBegin, m_ptSelectEnd, FALSE );

		int nClickBegin = GetIndexClick( m_ptSelectBegin );
		int nClickEnd = GetIndexClick( m_ptSelectEnd );
		if( -1 == nClickBegin )
		{
			if( m_ptSelectBegin.x < m_rectCenter.left )		nClickBegin	=	m_nIndexStart;
			if( m_ptSelectBegin.x > m_rectCenter.right )	nClickBegin	=	m_nIndexEnd;
		}
		if( -1 == nClickEnd )
		{
			if( m_ptSelectEnd.x < m_rectCenter.left )		nClickEnd	=	m_nIndexStart;
			if( m_ptSelectEnd.x > m_rectCenter.right )		nClickEnd	=	m_nIndexEnd;
		}

		if( -1 != nClickBegin && -1 != nClickEnd )
		{
			if( nClickBegin < nClickEnd ) // 放大
			{
				int nLeft = min(nClickBegin,nClickEnd);
				int nRight = max(nClickBegin,nClickEnd);

				if( 15*(nRight-nLeft+1) < m_rectCenter.Width() )
				{
					nLeft -= (m_rectCenter.Width() - 15*(nRight-nLeft+1))/30 + 1;
					nRight += (m_rectCenter.Width() - 15*(nRight-nLeft+1))/30 + 1;
				}

				int	nOldLen = m_nIndexEnd - m_nIndexStart;
				int	nOldThick = m_nThickness;
				ResetIndex( nLeft, nRight, m_nIndexCurrent );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区久久久| 亚洲天堂中文字幕| 国产在线国偷精品产拍免费yy| 日韩亚洲欧美高清| 国产精品亚洲专一区二区三区 | 51精品久久久久久久蜜臀| 婷婷久久综合九色国产成人| 在线播放欧美女士性生活| 蜜桃av一区二区| 国产人成一区二区三区影院| eeuss鲁片一区二区三区在线看| 一区二区三区在线观看欧美| 欧美日韩精品欧美日韩精品| 另类小说图片综合网| 久久久蜜桃精品| 色综合亚洲欧洲| 日韩av中文字幕一区二区三区| 久久综合色鬼综合色| 99视频精品免费视频| 亚洲综合色区另类av| 精品日韩av一区二区| 99麻豆久久久国产精品免费| 亚洲午夜久久久久久久久电影网 | 亚洲在线一区二区三区| 日韩欧美一区中文| 欧美一级搡bbbb搡bbbb| 国产成人99久久亚洲综合精品| 亚洲欧美日韩国产成人精品影院| 91精品欧美久久久久久动漫| 国产精品一区久久久久| 亚洲最色的网站| 久久伊人蜜桃av一区二区| 色素色在线综合| 国产精品系列在线播放| 亚洲成a人在线观看| 国产日产欧产精品推荐色 | 日韩一区二区三| www.色综合.com| 美女国产一区二区| 一区二区三区四区激情| 久久精品无码一区二区三区| 欧美精品在线观看播放| www.欧美精品一二区| 免费亚洲电影在线| 一区二区三区资源| 久久久精品欧美丰满| 欧美男女性生活在线直播观看| 国产成人高清在线| 日本欧美大码aⅴ在线播放| 亚洲三级在线播放| 国产肉丝袜一区二区| 56国语精品自产拍在线观看| 色婷婷国产精品综合在线观看| 国产丶欧美丶日本不卡视频| 日韩国产欧美三级| 五月天婷婷综合| 亚洲影院免费观看| 亚洲美女屁股眼交| 国产人久久人人人人爽| 精品国产91亚洲一区二区三区婷婷 | 偷偷要91色婷婷| 亚洲一区在线观看网站| 亚洲色图.com| 亚洲日本乱码在线观看| 国产精品视频免费| 亚洲国产高清在线观看视频| 国产三级一区二区| 国产日韩欧美精品一区| 久久中文字幕电影| 久久婷婷成人综合色| 精品国产麻豆免费人成网站| 日韩欧美激情在线| 精品日韩在线观看| 久久女同精品一区二区| 久久夜色精品一区| 国产亚洲短视频| 国产午夜精品久久久久久免费视 | 欧美一区二区三区日韩视频| 欧美福利视频导航| 欧美大肚乱孕交hd孕妇| 精品国产成人系列| 久久精品综合网| 国产精品久久一级| 日韩美女啊v在线免费观看| 亚洲免费在线视频| 亚洲国产综合在线| 蜜臀99久久精品久久久久久软件| 日韩高清在线观看| 久久99九九99精品| 成人激情小说网站| 91日韩精品一区| 欧美日本一区二区在线观看| 日韩三级精品电影久久久| 欧美videossexotv100| 久久久久久久久岛国免费| 久久久三级国产网站| ㊣最新国产の精品bt伙计久久| 综合久久久久久久| 日韩**一区毛片| 国产一区二区三区免费| 91在线你懂得| 欧美日韩一区二区欧美激情| 日韩欧美一区二区免费| 中文av一区二区| 亚洲国产精品综合小说图片区| 免费在线看成人av| 成人av第一页| 制服丝袜激情欧洲亚洲| 亚洲精品一区二区在线观看| 中文字幕亚洲欧美在线不卡| 亚洲图片欧美色图| 国产传媒欧美日韩成人| 欧美四级电影在线观看| 精品国产一区a| 亚洲综合视频在线观看| 韩国精品久久久| 91福利在线看| 久久久久国产成人精品亚洲午夜| 亚洲自拍另类综合| 国产精品一区免费在线观看| 欧美在线制服丝袜| 久久久www免费人成精品| 亚洲一区二区四区蜜桃| 国产精品一区三区| 欧美精品第一页| 中文字幕一区二区在线观看| 青青草国产成人99久久| 色婷婷香蕉在线一区二区| 精品久久久久久久人人人人传媒| 一区二区三区在线观看国产| 国产一区二区美女| 在线电影院国产精品| 亚洲日本在线天堂| 国产精品一区二区91| 69久久99精品久久久久婷婷| 国产精品国产自产拍高清av王其| 男人的j进女人的j一区| 日本韩国精品一区二区在线观看| 国产三级一区二区| 国内外成人在线视频| 欧美精品乱人伦久久久久久| 亚洲黄色录像片| 成人午夜在线播放| 久久久精品国产免费观看同学| 视频一区二区国产| 在线免费亚洲电影| 亚洲欧美一区二区在线观看| 国产精品一级在线| www久久久久| 国内欧美视频一区二区| 欧美一区二区福利在线| 亚洲18色成人| 欧美在线观看一二区| 亚洲欧美日韩综合aⅴ视频| 高清不卡一区二区在线| 久久夜色精品国产噜噜av| 精品在线观看视频| 日韩欧美综合在线| 日本强好片久久久久久aaa| 欧美三级日韩在线| 亚洲地区一二三色| 欧美美女一区二区| 香蕉成人啪国产精品视频综合网| 色哟哟精品一区| 伊人婷婷欧美激情| 色天使色偷偷av一区二区| 一区二区三区中文在线| 91免费国产在线观看| 亚洲少妇屁股交4| 色94色欧美sute亚洲线路一久| 亚洲色图在线看| 欧美吞精做爰啪啪高潮| 亚洲mv在线观看| 日韩精品一区二| 精品一区中文字幕| 国产亚洲福利社区一区| 成人黄页在线观看| 亚洲欧美日韩在线播放| 欧美吞精做爰啪啪高潮| 日本中文字幕一区二区有限公司| 欧美一区二区私人影院日本| 另类综合日韩欧美亚洲| 国产日韩欧美精品一区| 99免费精品视频| 午夜伊人狠狠久久| 欧美一级在线视频| 国产成人免费在线观看不卡| 国产精品卡一卡二卡三| 欧美丝袜自拍制服另类| 日本在线不卡一区| 久久久无码精品亚洲日韩按摩| 成人激情免费网站| 亚洲成av人片| 精品国产青草久久久久福利| jvid福利写真一区二区三区| 亚洲成av人片| 国产欧美一区二区三区鸳鸯浴| 色综合天天狠狠| 日本欧美在线看| 国产精品二区一区二区aⅴ污介绍|