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

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

?? chart.h

?? 是一個關于快速排序的算法的源代碼...很有用的
?? H
?? 第 1 頁 / 共 2 頁
字號:
///////////////////////////////////////////////////////////////////////
//chart.h, Juan Carlos Sanchez
///////////////////////////////////////////////////////////////////////

#if !defined(GRAF_H_10101010)
#define GRAF_H_10101010

// \n  |     /\\                /\\\n  |\\_/   \\       /\\_/    \\        _/\\\n  |          \\__/             \\__/      \\/\n  |___________________________

#define CTLOFFSET 0
#define SCROLL_VALUE 1000.0 

#define WM_NEWHORZLIMITS (CTLOFFSET + WM_USER + 701)
#define WM_NEWVERTLIMITS (CTLOFFSET + WM_USER + 702)

#define GS_NOTIFY	0x00000001L
#define LS_HORZAUTO 0x00010000
#define LS_POINT	0x00020000

#ifdef _AFXDLL

#define BEGIN_MESSAGE_MAP_TEMPLATES(thetemplate, theClass, baseClass) \
	thetemplate const AFX_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \
		{ return &baseClass::messageMap; } \
	thetemplate const AFX_MSGMAP* theClass::GetMessageMap() const \
		{ return &theClass::messageMap; } \
	thetemplate AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
	{ &theClass::_GetBaseMessageMap, &theClass::_messageEntries[0] }; \
	thetemplate AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
	{ \


#else

#define BEGIN_MESSAGE_MAP_TEMPLATES(thetemplate, theClass, baseClass) \
	thetemplate const AFX_MSGMAP* theClass::GetMessageMap() const \
		{ return &theClass::messageMap; } \
	thetemplate AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
	{ &baseClass::messageMap, &theClass::_messageEntries[0] }; \
	thetemplate AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
	{ \

#endif //_AFXDLL


#pragma warning (disable: 4786 4788)

#include <afxwin.h>
#include <math.h>
#include <map>
#include <set>


using namespace std;

template<class T >
class CScrollChart: public CWnd
{


public:
	int m_nSet;//用于得到子集數目
	int XOutput;
	UINT uX;
	UINT uID;

protected:
	
typedef map<T, T> MAPDATA;
//
typedef map<UINT,CString> MAPTIME;

typedef struct{
	MAPDATA m_mapData;
	COLORREF crColor;
	int nStyle;
	int nWidth;
	BOOL bIsVisible;
	BOOL bIsAuto;
	BOOL bPoints;
	T nAutoHorzInc;
	//
	MAPTIME m_Time;
	//
} stuctLine;

typedef map<UINT, stuctLine> MAPLINE;

	T m_MaxValue;
	T m_MinValue;
	T m_pointIni;
	T m_MaxHzVal;
	T m_MinHzVal;
	T m_nHzRange;

	MAPLINE m_mapLines;
	COLORREF m_ColorBk;	
	BOOL m_bGrid;
	BOOL m_bNorify;
	UINT m_nHorzDiv;
	UINT m_nVertDiv;
	UINT m_nMaxPoints;	
	set<UINT> m_setLinesID;


public:
	//這里相當于構造函數,在這里進行了初始化賦值
	CScrollChart(): CWnd(),  m_pointIni(0,0),   m_nHorzDiv(7), m_nVertDiv(14), m_nMaxPoints(0),
		m_mapLines(), m_setLinesID(), m_MaxHzVal(1000), m_nHzRange(1000), m_MinHzVal(0)
		/*自定義的一組變量*/,m_nSet(0),XOutput(0)/*自定義的一組變量*/{}

	//函數聲明


	BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);

	BOOL AddLine(UINT nID, COLORREF crColor, DWORD nStyle = PS_SOLID, 
					int nWidth = 1,BOOL bVisible = TRUE, int nAutoInc = 10);

	BOOL AddData(UINT nID, T nX, T nY, BOOL bDraw = TRUE);
	BOOL AddData(UINT nID, T nY, BOOL bDraw = TRUE);
	COLORREF SetBkColor(COLORREF cr );
	COLORREF GetBkColor() const;
	COLORREF SetLineColor(UINT nID, COLORREF cr );
	COLORREF GetLineColor(UINT nID);
	void ShowLine(UINT nID, BOOL value = TRUE, BOOL bDraw = TRUE); 
	void ShowPoints(UINT nID, BOOL value = TRUE, BOOL bDraw = TRUE); 
	void SetGrid(BOOL value = TRUE);
	T SetHorzRange(T nRange);
	T SetAutoinc(UINT nID, T nInc);
	UINT SetHorzDiv(UINT nDiv, BOOL bDraw = TRUE);
	UINT GetHorzDiv() const {return m_nHorzDiv;}
	UINT SetVertDiv(UINT nDiv, BOOL bDraw = TRUE);
	UINT GetVertDiv() const {return m_nVertDiv;}
	UINT SetMaxPoints(UINT nValue);
	UINT GetMaxPoints() const { return m_nMaxPoints;}
	int SetLineStyle(UINT nID, int nStile, BOOL bDraw = TRUE);
	int GetLineStyle(UINT nID);
	int SetLineWidth(UINT nID, int nWidth, BOOL bDraw = TRUE);
	int GetLineWidth(UINT nID);
	//Add a function to get system time
	CString GetCurrentTime();
//Rong.LL 07-6-11 add double click mouse left event
protected:
	afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);//鼠標的雙擊事件
	
protected:
	afx_msg void OnPaint();
	afx_msg void OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );
	CPoint LPtoDP(T X, T Y);
	CPoint LPtoDP(pair<T, T> pnt) {return LPtoDP(pnt.first, pnt.second);}
	BOOL bIsFirstPoint();	
	void UpdateScrollInfo();
	void SendNewLimits();
	void Normalize();
	BOOL ErasePoints();
	DECLARE_MESSAGE_MAP()
};

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////


BEGIN_MESSAGE_MAP_TEMPLATES(template<class T>, CScrollChart<T> , CWnd)
	//{{AFX_MSG_MAP(CTestView)
	ON_WM_LBUTTONDBLCLK()
	//}}AFX_MSG_MAP
	ON_WM_PAINT()
	ON_WM_HSCROLL()
END_MESSAGE_MAP()


template<class T> 
void CScrollChart<T>::OnPaint( )
{
	//畫出繪制曲線圖的網格和區域
	CRect RectClient;//用于存放客戶區
	CPen *penLine;
	CPen *oldPen;

	CPaintDC lop(this);
	GetClientRect(RectClient);
	CDC PaintDc;
	CBitmap bitm;
	PaintDc.CreateCompatibleDC(&lop);

	bitm.CreateCompatibleBitmap(&lop, RectClient.Width(), RectClient.Height());//創建位圖
    CBitmap* pOldBitmap = PaintDc.SelectObject (&bitm);

	PaintDc.SetBkMode(OPAQUE);//設置背景模式為SetBKColor()或者透明
	PaintDc.SetBkColor(m_ColorBk);//設置背景顏色
	PaintDc.SetViewportOrg(0, 0);

	CBrush bursh(m_ColorBk);
	PaintDc.FillRect(RectClient, &bursh);	
    
	if (m_bGrid)
	{
		//在此處加上Y軸坐標軸///////////////////////////////
		CPen *pY;
		pY = new CPen(PS_SOLID, 1, RGB(255,255,255 ));
		PaintDc.SelectObject(pY);
		
		
		PaintDc.Rectangle((m_nHzRange / m_nHorzDiv)*0.6,0,(m_nHzRange / m_nHorzDiv)*0.5\
			,RectClient.Height() / m_nVertDiv*12);//畫出X軸

		//PaintDc.MoveTo((m_nHzRange / m_nHorzDiv)*0.6,0);
		//PaintDc.LineTo((m_nHzRange / m_nHorzDiv)*0.6,RectClient.Height() / m_nVertDiv*12);
		//PaintDc.MoveTo((m_nHzRange / m_nHorzDiv)*0.6,0);//畫箭頭
		//PaintDc.LineTo((m_nHzRange / m_nHorzDiv)*0.5,5);
		//PaintDc.MoveTo((m_nHzRange / m_nHorzDiv)*0.6,0);
		//PaintDc.LineTo((m_nHzRange / m_nHorzDiv)*0.7,5);

		//X軸刻度
		PaintDc.SetTextColor(RGB(255,255,255));
		PaintDc.TextOut(0,0,"120");
		PaintDc.TextOut(0,RectClient.Height() / m_nVertDiv*1,"220");
		PaintDc.TextOut(0,RectClient.Height() / m_nVertDiv*2,"200");
		PaintDc.TextOut(0,RectClient.Height() / m_nVertDiv*3,"180");
		PaintDc.TextOut(0,RectClient.Height() / m_nVertDiv*4,"160");
		PaintDc.TextOut(0,RectClient.Height() / m_nVertDiv*5,"140");
		PaintDc.TextOut(0,RectClient.Height() / m_nVertDiv*6,"120");
		PaintDc.TextOut(0,RectClient.Height() / m_nVertDiv*7,"100");
		PaintDc.TextOut(0,RectClient.Height() / m_nVertDiv*8,"80");
		PaintDc.TextOut(0,RectClient.Height() / m_nVertDiv*9,"60");
		PaintDc.TextOut(0,RectClient.Height() / m_nVertDiv*10,"40");
		PaintDc.TextOut(0,RectClient.Height() / m_nVertDiv*11,"20");
		PaintDc.TextOut(0,RectClient.Height() / m_nVertDiv*11.5,"0");
		
		///////////////////////////////////////////////////////

		penLine = new CPen(PS_SOLID, 1, RGB(0, 128, 0));
		oldPen = PaintDc.SelectObject(penLine);		
		if (m_nVertDiv > 0)
		{
			///////////////////////畫出水平的網格線///////////////////
			for (int n = RectClient.Height() / m_nVertDiv; n < RectClient.Height ();
						n += RectClient.Height() / m_nVertDiv)
			{	
				PaintDc.MoveTo(0, n);
				PaintDc.LineTo(RectClient.Width(), n);
			}
		}
		if (m_nHorzDiv > 0)
		{
			///////////////////////畫出垂直的網格線///////////////////
			for (int n = m_pointIni + ((m_nHzRange / m_nHorzDiv) - fmod(m_pointIni,m_nHzRange));
					n < m_pointIni + m_nHzRange; 
					n += (m_nHzRange / m_nHorzDiv))
			{						
				int nInipoint=LPtoDP(n, 0).x;
				PaintDc.MoveTo(nInipoint, 0);
				PaintDc.LineTo(nInipoint, RectClient.Width ());
			}
		}
		PaintDc.SelectObject(oldPen);
		delete(penLine);
	}  //Grid

	if (!m_mapLines.empty())//實際劃線代碼使用了容器  有新數據就加入到尾部 每次畫一定長度的 在滾動條時再通過變量調整 
	{
		MAPLINE::const_iterator iterLine = m_mapLines.begin();
		while ((iterLine) != m_mapLines.end())
		{
			if (!(*iterLine).second.m_mapData.empty())
				{
				if ((*iterLine).second.bIsVisible)
				{
					CPoint pointDraw;
					CPoint pointOld;
					CSize sizePoint( 2+((*iterLine).second.nWidth),
									2+((*iterLine).second.nWidth) );
					CBrush brushPoint;

					brushPoint.CreateSolidBrush((*iterLine).second.crColor);
					penLine = new CPen((*iterLine).second.nStyle, 
									(*iterLine).second.nWidth, 
									(*iterLine).second.crColor);
					oldPen = PaintDc.SelectObject(penLine);
					CBrush* oldBrush = PaintDc.SelectObject(&brushPoint);
					MAPDATA::const_iterator iter = (*iterLine).second.m_mapData.lower_bound(m_pointIni);
					if (iter != (*iterLine).second.m_mapData.begin()) --iter;
					pointDraw = LPtoDP((*iter));
					PaintDc.MoveTo(pointDraw);
					///////////////////////////////// TEST /////////////////////////////////////////////
					//在變量定義部分定義了一個map容器用于存放對應數據點的時間 在此處定義此map的迭代器
					//并將其取值范圍限定在一個窗口范圍內 當滾動滾動條的時候再相應改變
					MAPTIME::const_iterator iterTime = (*iterLine).second.m_Time.lower_bound(m_pointIni);
					PaintDc.TextOut(pointDraw.x,531,(*iterTime).second);//輸出時間
					iterTime++;
					///////////////////////////////// TEST /////////////////////////////////////////////
					pointOld = pointDraw;
					iter++;
					while ( (iter != (*iterLine).second.m_mapData.upper_bound(m_nHzRange + m_pointIni))
							&& (iter != (*iterLine).second.m_mapData.end()) 
							&& (iterTime != (*iterLine).second.m_Time.upper_bound(m_nHzRange + m_pointIni)))
						{
							pointDraw = LPtoDP((*iter));
							PaintDc.LineTo(pointDraw);//畫線完成
							///////////////////////////////////////////////////////
							PaintDc.TextOut(pointDraw.x,531,(*iterTime).second);
							iterTime++;
							///////////////////////////////////////////////////////
							if ((*iterLine).second.bPoints) 
								PaintDc.Ellipse(CRect( pointOld - sizePoint,
													pointOld + sizePoint) );
							pointOld = pointDraw;
							++iter;
						}
					if ((*iterLine).second.bPoints) 
						PaintDc.Ellipse(CRect( pointOld - sizePoint,
											pointOld + sizePoint) );
					if (iter != (*iterLine).second.m_mapData.end()) 
						{
							pointOld=LPtoDP(*iter);
							PaintDc.LineTo(pointOld);
							if ((*iterLine).second.bPoints) 
								PaintDc.Ellipse( CRect( pointOld - sizePoint,
												pointOld + sizePoint) );
						}
					PaintDc.SelectObject(oldPen);
					PaintDc.SelectObject(oldBrush);
					delete(penLine);
				}
				}
			iterLine++;
		}
		
	} // not empty
	lop.BitBlt(0,0,RectClient.Width(), RectClient.Height(), &PaintDc, 0, 0, SRCCOPY);
	PaintDc.SelectObject(pOldBitmap);
}

template<class T> 
BOOL CScrollChart<T>::AddData(UINT nID, T nY, BOOL bDraw)
{
	if ( (m_setLinesID.find(nID) == m_setLinesID.end()) || (!(m_mapLines[nID].bIsAuto)) )
		return FALSE;
	if (m_mapLines[nID].m_mapData.empty())
		return AddData(nID, 0, nY, bDraw);
	return AddData(nID, 
		(*(--m_mapLines[nID].m_mapData.end())).first + m_mapLines[nID].nAutoHorzInc,
		nY, bDraw);
}
	
template<class T> 
BOOL CScrollChart<T>::AddData(UINT nID, T nX, T nY, BOOL bDraw)
{
	if (m_setLinesID.find(nID) == m_setLinesID.end())
		return FALSE;
	BOOL bScrollModi = FALSE;
	
	if (bIsFirstPoint())
	{
		m_MaxValue = 200;//在這里控制坐標的最大值和最小值,默認是nY
		m_MinValue = 0;		
		SendNewLimits();
	}
	else 
	{
	
		if (!m_mapLines[nID].m_mapData.empty())
		{
	

			if ( ((*(--(m_mapLines[nID].m_mapData.end()))).first >= m_pointIni) &&
				 ((*(--(m_mapLines[nID].m_mapData.end()))).first <= m_pointIni + m_nHzRange) &&
				 (nX > m_pointIni + m_nHzRange * .9) )
			{
			//Move init
				m_pointIni = nX - (m_nHzRange * .9);
				bScrollModi = TRUE;
			}
		}
	
		if ( (!bScrollModi) && (nX > m_MaxHzVal) && (nX>m_nHzRange) )
		{
			//right-out
			m_MaxHzVal = nX + m_nHzRange * .1;
			bScrollModi = TRUE;
		}

		if ( (!bScrollModi) && (nX < m_MinHzVal) )
		{
			//left
			m_MinHzVal = nX;
			bScrollModi = TRUE; 
		}

		if (nY > m_MaxValue)
		{
			m_MaxValue = nY;
			SendNewLimits();
		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久久久久 | 中文字幕一区av| 国产一区二区三区综合| 精品久久久久久无| 国产一区二区日韩精品| 国产亚洲精品中文字幕| 国产高清精品在线| 国产精品久久一级| 91在线高清观看| 一区二区三区.www| 5月丁香婷婷综合| 久久99精品国产麻豆不卡| 久久一区二区三区四区| 国产毛片精品国产一区二区三区| 久久久亚洲精品石原莉奈| 国产成人在线免费| 亚洲三级在线看| 欧美图片一区二区三区| 日本vs亚洲vs韩国一区三区二区| 欧美大黄免费观看| 国产91精品欧美| 亚洲免费伊人电影| 在线综合视频播放| 国产美女在线精品| 亚洲一区二区三区小说| 日韩欧美中文字幕制服| 国产成人av网站| 亚洲欧美日韩成人高清在线一区| 色狠狠色噜噜噜综合网| 奇米777欧美一区二区| 久久久一区二区三区捆绑**| 91在线观看地址| 日韩有码一区二区三区| 久久久久久久久久看片| 一本大道av伊人久久综合| 青青草国产精品97视觉盛宴| 中文一区一区三区高中清不卡| 91成人在线观看喷潮| 国产真实精品久久二三区| 亚洲免费观看高清在线观看| 91精品国产综合久久久蜜臀粉嫩 | 精品一区二区三区在线观看| 国产精品毛片无遮挡高清| 欧美三级电影一区| 高清成人在线观看| 日本伊人色综合网| 日韩理论电影院| 精品国产免费视频| 在线观看亚洲a| 风间由美性色一区二区三区| 亚洲一区二区精品视频| 国产日韩成人精品| 日韩一区二区三区视频在线| 91视频.com| 国产suv一区二区三区88区| 日韩国产欧美在线观看| 亚洲精品国产无天堂网2021 | 国产精品电影一区二区三区| 日韩你懂的在线观看| 欧美色图在线观看| 白白色亚洲国产精品| 国内成人精品2018免费看| 午夜欧美大尺度福利影院在线看| 亚洲欧洲另类国产综合| 久久新电视剧免费观看| 这里只有精品免费| 欧美日韩精品综合在线| 色婷婷综合在线| 成人免费视频一区| 国产精品一二三四| 黄一区二区三区| 久久国产尿小便嘘嘘尿| 日本视频免费一区| 三级精品在线观看| 日韩综合在线视频| 污片在线观看一区二区| 亚洲国产中文字幕在线视频综合| 综合在线观看色| 国产精品福利在线播放| 国产人妖乱国产精品人妖| 久久综合九色综合97婷婷女人| 欧美一区欧美二区| 日韩三级伦理片妻子的秘密按摩| 欧美高清激情brazzers| 欧美精品在线观看一区二区| 欧美丝袜第三区| 欧美日韩免费电影| 欧美女孩性生活视频| 在线不卡中文字幕播放| 欧美精品久久一区二区三区| 欧美高清视频一二三区| 欧美一区中文字幕| 欧美精品一区二区三区在线播放 | 国产专区综合网| 国产麻豆精品视频| 岛国精品在线播放| 91蝌蚪porny九色| 在线观看成人免费视频| 欧美高清性hdvideosex| 欧美成人r级一区二区三区| 2021国产精品久久精品| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲视频电影在线| 一区二区三区成人| 成人av免费观看| www.视频一区| 欧美系列在线观看| 欧美一区二区三区四区五区 | 91麻豆精品国产91久久久| 日韩精品影音先锋| 欧美国产精品中文字幕| 一区二区在线观看视频| 日本午夜精品一区二区三区电影 | 亚洲图片激情小说| 午夜精品免费在线| 国产呦精品一区二区三区网站| 国产.欧美.日韩| 欧美影院午夜播放| 欧美草草影院在线视频| 国产精品久久夜| 亚洲图片欧美一区| 国产九九视频一区二区三区| 一本大道av伊人久久综合| 欧美一区二区三区白人| 国产情人综合久久777777| 亚洲精品国产精华液| 精品无人区卡一卡二卡三乱码免费卡| 成熟亚洲日本毛茸茸凸凹| 欧美色手机在线观看| 精品国产免费一区二区三区四区 | 成人激情视频网站| 欧美日本乱大交xxxxx| 国产视频在线观看一区二区三区| 一区二区欧美精品| 国产最新精品免费| 欧美日韩一区在线观看| 久久久久免费观看| 日韩制服丝袜先锋影音| youjizz国产精品| 精品国精品自拍自在线| 亚洲一级二级在线| 成人综合婷婷国产精品久久 | 成人av免费网站| 精品日产卡一卡二卡麻豆| 亚洲国产一区二区视频| va亚洲va日韩不卡在线观看| 精品久久久久久亚洲综合网| 亚洲五码中文字幕| 不卡的av电影| 久久久国产精华| 老司机午夜精品99久久| 欧美日韩国产高清一区二区| 最新国产精品久久精品| 国产精品亚洲成人| 日韩欧美综合一区| 日韩中文欧美在线| 欧美日韩免费一区二区三区视频 | 国产久卡久卡久卡久卡视频精品| 在线播放欧美女士性生活| 亚洲视频网在线直播| 成人午夜大片免费观看| 久久综合给合久久狠狠狠97色69| 青娱乐精品在线视频| 欧美亚洲国产一区二区三区| 亚洲色图制服诱惑| www.亚洲国产| 综合激情成人伊人| 成人免费观看男女羞羞视频| 久久九九久久九九| 国产一区在线看| xfplay精品久久| 国内成人精品2018免费看| 精品国产免费久久 | 日韩一区二区三区视频在线 | 国产激情视频一区二区在线观看| 欧美精品一区二区在线观看| 精品亚洲aⅴ乱码一区二区三区| 日韩欧美国产精品一区| 久久99精品久久久久久| 亚洲精品一区二区三区四区高清| 精品一区二区三区在线视频| www激情久久| 懂色av一区二区三区免费观看| 国产农村妇女毛片精品久久麻豆 | 国产欧美精品一区二区色综合| 国产成人一区在线| 国产精品久久久久久久久搜平片 | 91精品国产黑色紧身裤美女| 蜜臀av性久久久久av蜜臀妖精| 日韩欧美国产一区二区在线播放| 久久成人av少妇免费| 久久这里只有精品视频网| 国产不卡免费视频| 亚洲欧美日韩在线不卡| 欧美日韩精品三区| 久久99久久精品| 中文字幕乱码亚洲精品一区| 91免费在线视频观看| 亚洲高清三级视频| 亚洲精品在线观|