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

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

?? 2dklinegraph.cpp

?? 我做的一個簡單的讀取*.day股票歷史數據的顯示成KLine的小例子。
?? CPP
字號:

#include "stdafx.h"
#include ".\2dklinegraph.h"


C2DKLineGraph::C2DKLineGraph(CSize size)
{
	m_Size = size;

	m_GraphValues = NULL;
	m_AnalysePeriod = GP_DAY;
	m_GraphValuesCount = 0;
	
	m_MinValue = 999999;
	m_MaxValue = 0;
	m_DisplayMinValue = 999999;
	m_DisplayMaxValue = 0;
}

C2DKLineGraph::~C2DKLineGraph(void)
{
	ClearGraph();
}

void C2DKLineGraph::CreateGraph(CDC * pDC)
{
	//找到原點
	//畫水平坐標(線,刻度),根據起始時間和結束時間定義水平坐標系
	//畫垂直坐標(線,刻度),根據最大值最小值定義垂直坐標系

	int clientWidth = m_Size.cx-50;
	int clientHeight = m_Size.cy-20;

	CPen red_pen;
	red_pen.CreatePen(PS_SOLID, 0, RGB(255,0,0));
	pDC->SelectObject(red_pen);

	pDC->MoveTo(0, clientHeight);
	pDC->LineTo(m_Size.cx, clientHeight);

	pDC->MoveTo(clientWidth, 0);
	pDC->LineTo(clientWidth, m_Size.cy);

	if (m_GraphValuesCount>0)
	{
		int drawindex = 0;
		int drawcount = m_GraphValuesCount;
		if (m_GraphValuesCount>100)
		{
			drawindex = m_GraphValuesCount-100;
			drawcount = 100;
		}

		double segmentWidth = clientWidth/drawcount;
		//for(int i=0;i<drawcount;i++)
		//{
		//	pDC->MoveTo(i*(int)segmentWidth, clientHeight);
		//	pDC->LineTo(i*(int)segmentWidth, m_Size.cy);
		//}

		//求出最低值和最高值
		_2DKLineGraphValues* cur_val = m_GraphValues;
		while(cur_val!=NULL)
		{
			int index = cur_val->index;
			if (index>=drawindex)
			{
				index = index-drawindex;
				double min = cur_val->minvalue;
				double max = cur_val->maxvalue;
				double week = cur_val->weekma;
				double halfmonth = cur_val->halfmonthma;
				double month = cur_val->monthma;
				double quarter = cur_val->quarterma;

				if (m_DisplayMinValue>min)
					m_DisplayMinValue = min;
				if (m_DisplayMinValue>week)
					m_DisplayMinValue = week;
				if (m_DisplayMinValue>halfmonth)
					m_DisplayMinValue = halfmonth;
				if (m_DisplayMinValue>month)
					m_DisplayMinValue = month;
				if (m_DisplayMinValue>quarter)
					m_DisplayMinValue = quarter;

				if (m_DisplayMaxValue<max)
					m_DisplayMaxValue = max;
				if (m_DisplayMaxValue<week)
					m_DisplayMaxValue = week;
				if (m_DisplayMaxValue<halfmonth)
					m_DisplayMaxValue = halfmonth;
				if (m_DisplayMaxValue<month)
					m_DisplayMaxValue = month;
				if (m_DisplayMaxValue<quarter)
					m_DisplayMaxValue = quarter;
			}
			cur_val = cur_val->next;
		}

		double unitScale = (clientHeight-40)/(m_DisplayMaxValue-m_DisplayMinValue);
		
		CPoint *weekmapoints = new CPoint[drawcount];
		CPoint *halfmonthmapoints = new CPoint[drawcount];
		CPoint *monthmapoints = new CPoint[drawcount];
		CPoint *quartermapoints = new CPoint[drawcount];

		int cur_month = 0;
		cur_val = m_GraphValues;
		while(cur_val!=NULL)
		{
			int index = cur_val->index;
			double min = cur_val->minvalue;
			double max = cur_val->maxvalue;
			double start = cur_val->startvalue;
			double end = cur_val->endvalue;
			double week = cur_val->weekma;
			double halfmonth = cur_val->halfmonthma;
			double month = cur_val->monthma;
			double quarter = cur_val->quarterma;
			CTime time = CTime(cur_val->t);

			if (index>=drawindex)
			{
				index = index-drawindex;
				
				if (cur_month!=0)
				{
					if (time.GetMonth()!=cur_month)
					{
						CPen red_pen;
						red_pen.CreatePen(PS_SOLID, 0, RGB(255,0,0));
						pDC->SelectObject(red_pen);

						CFont font;   
						font.CreatePointFont(90,   "MyFont");   
						pDC->SelectObject(font);   

						CRect monthRect(index*(int)segmentWidth+(int)(0.5*(int)segmentWidth)+3,m_Size.cy-20,index*(int)segmentWidth+(int)(0.5*(int)segmentWidth)+10,m_Size.cy);
						CString strMonth;
						strMonth.Format("%d",time.GetMonth());
						pDC->SetTextColor(RGB(255,0,0));
						pDC->SetBkColor(RGB(0,0,0));
						pDC->DrawText(strMonth,&monthRect, DT_VCENTER | DT_SINGLELINE );

						pDC->MoveTo(index*(int)segmentWidth+(int)(0.5*(int)segmentWidth), clientHeight);
						pDC->LineTo(index*(int)segmentWidth+(int)(0.5*(int)segmentWidth), m_Size.cy);

					}
				}
				if (time.GetMonth()!=cur_month)
				{
					cur_month = time.GetMonth();
				}

				if (index ==0)
				{
					CPen red_pen;
					red_pen.CreatePen(PS_SOLID, 0, RGB(255,0,0));
					pDC->SelectObject(red_pen);

					CFont font;   
					font.CreatePointFont(90,   "MyFont");   
					pDC->SelectObject(font);   

					CRect yearRect(0,m_Size.cy-20,50,m_Size.cy);
					CString strYear;
					strYear.Format("%d %d",time.GetYear(),time.GetMonth());
					pDC->SetTextColor(RGB(255,0,0));
					
					pDC->SetBkColor(RGB(0,0,0));
					pDC->DrawText(strYear,&yearRect, DT_VCENTER | DT_SINGLELINE );
				}
				else
				{
				}
				if (start>end)
				{
					//畫綠線
					int x1 = (int)(segmentWidth*(0.1)+(segmentWidth*(index)));
					int y1 = (int)((m_DisplayMaxValue-start)*unitScale+20);
					int x2 = (int)(segmentWidth*(0.9)+(segmentWidth*(index)));
					int y2 = (int)((m_DisplayMaxValue-end)*unitScale+20);
					CBrush greenBrush(RGB(0,255,255));
					CRect greenlineRect(x1,y1,x2,y2);
					pDC->FillRect(greenlineRect,&greenBrush);

					int x3 = (x2-x1)/2+x1;
					int y3 = (int)((m_DisplayMaxValue-max)*unitScale+20);
					int x4 = (x2-x1)/2+x1;
					int y4 = (int)((m_DisplayMaxValue-min)*unitScale+20);
					CPen green_pen;
					green_pen.CreatePen(PS_SOLID, 0, RGB(0,255,255));
					pDC->SelectObject(green_pen);

					pDC->MoveTo(x3, y3);
					pDC->LineTo(x4, y4);
				}
				else if (start==end)
				{
					//畫白線
					int x1 = (int)(segmentWidth*(0.1)+(segmentWidth*(index)));
					int x2 = (int)(segmentWidth*(0.9)+(segmentWidth*(index)));

					int y1 = (int)((m_DisplayMaxValue-start)*unitScale+20);

					CPen white_pen;
					white_pen.CreatePen(PS_SOLID, 0, RGB(255,255,255));
					pDC->SelectObject(white_pen);

					pDC->MoveTo(x1, y1);
					pDC->LineTo(x2, y1);

					int x3 = (x2-x1)/2+x1;
					int y3 = (int)((m_DisplayMaxValue-max)*unitScale+20);
					int y4 = (int)((m_DisplayMaxValue-min)*unitScale+20);

					pDC->MoveTo(x3, y3);
					pDC->LineTo(x3, y4);


				}
				else if (start<end)
				{
					//畫紅線
					int x1 = (int)(segmentWidth*(0.1)+(segmentWidth*(index)));
					int y1 = (int)((m_DisplayMaxValue-end)*unitScale+20);
					int x2 = (int)(segmentWidth*(0.9)+(segmentWidth*(index)));
					int y2 = (int)((m_DisplayMaxValue-start)*unitScale+20);
					CPen red_pen;
					red_pen.CreatePen(PS_SOLID, 0, RGB(255,0,0));
					pDC->SelectObject(red_pen);
					CRect redlineRect(x1,y1,x2,y2);
					pDC->Rectangle(redlineRect);

					int x3 = (x2-x1)/2+x1;
					int y3 = (int)((m_DisplayMaxValue-max)*unitScale+20);
					int x4 = (x2-x1)/2+x1;
					int y4 = (int)((m_DisplayMaxValue-min)*unitScale+20);

					pDC->MoveTo(x3, y3);
					pDC->LineTo(x4, y1);

					pDC->MoveTo(x3, y2);
					pDC->LineTo(x4, y4);
				}


				weekmapoints[index].x = (int)(segmentWidth*(0.5)+(segmentWidth*(index)));
				weekmapoints[index].y = (int)((m_DisplayMaxValue-week)*unitScale+20);

				halfmonthmapoints[index].x = (int)(segmentWidth*(0.5)+(segmentWidth*(index)));
				halfmonthmapoints[index].y = (int)((m_DisplayMaxValue-halfmonth)*unitScale+20);

				monthmapoints[index].x = (int)(segmentWidth*(0.5)+(segmentWidth*(index)));
				monthmapoints[index].y = (int)((m_DisplayMaxValue-month)*unitScale+20);

				quartermapoints[index].x = (int)(segmentWidth*(0.5)+(segmentWidth*(index)));
				quartermapoints[index].y = (int)((m_DisplayMaxValue-quarter)*unitScale+20);
			}
			cur_val = cur_val->next;
		}
		//畫5日均線
		CPen white_pen;
		white_pen.CreatePen(PS_SOLID, 0, RGB(255,255,255));
		pDC->SelectObject(white_pen);
		pDC->Polyline(weekmapoints,drawcount);
		//畫10日均線
		CPen yellow_pen;
		yellow_pen.CreatePen(PS_SOLID, 0, RGB(255,255,0));
		pDC->SelectObject(yellow_pen);
		pDC->Polyline(halfmonthmapoints,drawcount);
		//畫20日均線
		CPen purple_pen;
		purple_pen.CreatePen(PS_SOLID, 0, RGB(255,0,255));
		pDC->SelectObject(purple_pen);
		pDC->Polyline(monthmapoints,drawcount);
		//畫60日均線
		CPen green_pen;
		green_pen.CreatePen(PS_SOLID, 0, RGB(0,255,0));
		pDC->SelectObject(green_pen);
		pDC->Polyline(quartermapoints,drawcount);

		delete weekmapoints;
		delete halfmonthmapoints;
		delete monthmapoints;
		delete quartermapoints;

	}
}


void C2DKLineGraph::SetValue(__time64_t t, double startvalue, double maxvalue, double minvalue, double endvalue)
{
	m_GraphValuesCount++;

	_2DKLineGraphValues* new_val = new _2DKLineGraphValues;
	new_val->t = t;
	new_val->minvalue = minvalue;
	new_val->maxvalue = maxvalue;
	new_val->startvalue = startvalue;
	new_val->endvalue = endvalue;
	new_val->next = NULL;
	new_val->prev = NULL;

	_2DKLineGraphValues* cur_val = m_GraphValues;
	if(cur_val == NULL)
	{
		m_MinValue = new_val->minvalue;
		m_MaxValue = new_val->maxvalue;
		new_val->index = 0;
		m_GraphValues = new_val;
	}
	else
	{
		int index = 1;
		while(cur_val->next!=NULL)
		{
			cur_val = cur_val->next;
			index++;
		}
		new_val->index = index;
		new_val->prev = cur_val;
		cur_val->next = new_val;
	}

	new_val->weekma = GetMAValue(new_val,5);
	new_val->halfmonthma = GetMAValue(new_val,10);
	new_val->monthma = GetMAValue(new_val,20);
	new_val->quarterma = GetMAValue(new_val,60);

	if (new_val->minvalue<m_MinValue)
	{
		m_MinValue = new_val->minvalue;
	}
	if (new_val->maxvalue>m_MaxValue)
	{
		m_MaxValue = new_val->maxvalue;
	}
}


void C2DKLineGraph::SetGraphSize(CSize g_size)
{
	m_Size = g_size;
}


void C2DKLineGraph::ClearGraph()
{
	_2DKLineGraphValues* prev_val; 
	_2DKLineGraphValues* cur_val = m_GraphValues;
	while(cur_val!=NULL)
	{
		prev_val = cur_val;
		cur_val = cur_val->next;
		delete prev_val;
	}
	m_GraphValues = NULL;
	m_MaxValue = 0;
	m_MinValue = 999999;
	m_DisplayMaxValue = 0;
	m_DisplayMinValue = 999999;
	m_GraphValuesCount =0;
}

double C2DKLineGraph::GetMAValue(_2DKLineGraphValues* cur_val,int period)
{

	_2DKLineGraphValues* tmp_val;
	int i =0;
	double fivematotal= 0;
	double fivemavalue = 0;
	tmp_val = cur_val;
	while(tmp_val!=NULL && i<period)
	{
		if (tmp_val!=NULL)
		{
			fivematotal += tmp_val->endvalue;
		}
		tmp_val = tmp_val->prev;
		i++;
	}
	if (i==period)
	{
		fivemavalue = fivematotal/period;
	}
	return fivemavalue;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品是欧美日韩精品| 日韩一本二本av| 欧美日本一区二区| 久久综合九色综合久久久精品综合| 国产精品网曝门| 偷拍日韩校园综合在线| 国产一区二区三区黄视频 | 亚洲五码中文字幕| 国产在线麻豆精品观看| 色噜噜狠狠色综合欧洲selulu| 日韩一区二区视频| 日日骚欧美日韩| 亚洲bt欧美bt精品| 国产精品一区在线观看乱码| 成人免费av在线| 91精品国产色综合久久| 国产精品国产三级国产普通话蜜臀| 亚洲午夜久久久久久久久久久 | 色狠狠色噜噜噜综合网| 精品国内二区三区| 一区二区三区欧美亚洲| 国产精品亚洲成人| 欧美一区二区三区思思人| 中文字幕欧美一| 极品美女销魂一区二区三区免费| 91老司机福利 在线| 精品欧美黑人一区二区三区| 亚洲高清免费观看| av在线免费不卡| 亚洲精品一区二区精华| 五月天中文字幕一区二区| 成人午夜激情片| 精品国产一区二区三区av性色| 亚洲国产一区二区三区| 不卡大黄网站免费看| 日韩欧美国产电影| 一区二区成人在线观看| 国产成人综合亚洲网站| 在线播放日韩导航| 亚洲国产视频网站| 欧美丝袜丝交足nylons图片| 亚洲欧美二区三区| 91麻豆精东视频| 国产精品国产自产拍高清av| 国产成人精品aa毛片| 精品国产123| 国产一区二区三区四| 日韩精品一区二区三区中文精品| 日韩综合一区二区| 精品视频一区二区不卡| 一区二区三区四区蜜桃| 色狠狠一区二区三区香蕉| 一区二区三区日韩欧美精品| 91蝌蚪porny| 一区二区三区精品在线观看| 一本到不卡精品视频在线观看| 亚洲免费色视频| 91麻豆福利精品推荐| 亚洲狼人国产精品| 色综合中文综合网| 欧美色窝79yyyycom| 亚洲伊人色欲综合网| 欧美视频在线播放| 奇米在线7777在线精品| 欧美成人精品1314www| 国产一区二区导航在线播放| 精品国产一区久久| 国产精品99久久久久久久vr | 亚洲人成网站色在线观看| 色吧成人激情小说| 日韩主播视频在线| 日韩和欧美的一区| 黑人巨大精品欧美黑白配亚洲| 91无套直看片红桃| 午夜久久久影院| 精品日韩成人av| 91色porny蝌蚪| 午夜免费久久看| 久久亚洲一级片| 国模一区二区三区白浆| 最近中文字幕一区二区三区| 欧美无乱码久久久免费午夜一区 | 欧美精品一区二区高清在线观看| 国产99一区视频免费| 亚洲精品久久久蜜桃| 欧美一区二区视频免费观看| 国产麻豆成人传媒免费观看| 亚洲免费色视频| 日韩一区二区三区精品视频| 福利电影一区二区三区| 视频一区二区三区入口| 国产欧美日韩中文久久| 欧美日韩国产一级| 国产成人av一区| 日韩avvvv在线播放| 欧美精品一区二区三区很污很色的 | 色94色欧美sute亚洲13| 另类欧美日韩国产在线| 久久久777精品电影网影网| 在线观看一区二区视频| 老司机免费视频一区二区三区| 国产女人18毛片水真多成人如厕| 欧美日韩久久一区二区| 99精品一区二区三区| 久久9热精品视频| 亚洲综合一二区| 中文字幕一区免费在线观看| 久久综合av免费| 99精品欧美一区二区蜜桃免费 | 972aa.com艺术欧美| 麻豆91免费看| 亚洲第一av色| 亚洲久草在线视频| 国产精品久久久久久久裸模| 日韩一区二区在线观看视频| 欧美综合亚洲图片综合区| 91在线国产观看| 国产suv精品一区二区883| 狠狠色狠狠色综合| 久久国产精品区| 日韩成人午夜电影| 午夜精品爽啪视频| 亚洲综合色在线| 亚洲午夜国产一区99re久久| 亚洲精品日产精品乱码不卡| 亚洲三级电影全部在线观看高清| 欧美国产一区二区| 日韩欧美在线综合网| 欧美挠脚心视频网站| 99在线精品视频| 国产精品一区二区久激情瑜伽| 日韩国产成人精品| 午夜av一区二区| 性做久久久久久久久| 天天影视涩香欲综合网| 五月天精品一区二区三区| 亚洲成人午夜电影| 日本中文一区二区三区| 欧美aⅴ一区二区三区视频| 美腿丝袜在线亚洲一区 | 亚洲丝袜另类动漫二区| 亚洲久本草在线中文字幕| 亚洲麻豆国产自偷在线| 一区二区三区影院| 香港成人在线视频| 免费在线视频一区| 三级久久三级久久| 日韩成人精品在线| 精品亚洲aⅴ乱码一区二区三区| 久久成人精品无人区| 久久aⅴ国产欧美74aaa| 国产一区二区三区在线观看免费视频| 国产精品综合久久| 99re亚洲国产精品| 欧美久久久久中文字幕| 欧美精品一区二区三区久久久| 国产日韩欧美综合在线| 国产精品免费久久| 午夜欧美在线一二页| 奇米一区二区三区av| 国产99久久久精品| 欧美视频你懂的| 精品精品国产高清a毛片牛牛| 国产女主播在线一区二区| 亚洲国产一区二区在线播放| 久久激五月天综合精品| 91美女视频网站| 日韩一二三四区| 久久影院午夜论| 中文字幕永久在线不卡| 亚洲电影你懂得| 国v精品久久久网| 欧美性三三影院| 中文成人综合网| 日本伊人精品一区二区三区观看方式| 91在线观看视频| 国产精品狼人久久影院观看方式| 韩国中文字幕2020精品| 日韩三级.com| 天堂成人国产精品一区| 欧美综合亚洲图片综合区| 国产精品成人免费在线| 成人一区二区三区视频在线观看 | 亚洲欧美一区二区三区国产精品 | 91伊人久久大香线蕉| 欧美另类一区二区三区| 国产精品久久久久一区| 国产91在线|亚洲| 精品国产精品一区二区夜夜嗨| 亚洲成av人在线观看| 欧美在线啊v一区| 亚洲激情成人在线| 99久精品国产| 一区二区三区在线免费播放| 91久久一区二区| 一区二区三区**美女毛片| 在线精品视频一区二区| 一级特黄大欧美久久久| 色婷婷久久久综合中文字幕| 一区二区三区精品在线观看|