⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chart.h

📁 是一个关于快速排序的算法的源代码...很有用的
💻 H
📖 第 1 页 / 共 2 页
字号:
		if (nY < m_MinValue) 
		{
			m_MinValue = nY;
			SendNewLimits();
		}
	} //else fisrt point
	//
	uID = nID;
	uX = nX;
	//
	/////////////////////////////////////////
	m_mapLines[nID].m_Time[nX] = GetCurrentTime();
	/////////////////////////////////////////

	m_mapLines[nID].m_mapData[nX] = nY;


	if (ErasePoints()) bScrollModi = TRUE;

	if (bScrollModi) Normalize();

	if (bDraw) Invalidate();//导致OnPaint()的调用

	if (bScrollModi) UpdateScrollInfo();
 
	return TRUE;
}

template<class T> 
BOOL CScrollChart<T>::AddLine(UINT nID, COLORREF crColor, DWORD  nStyle, int nWidth, BOOL bVisible, int nAutoInc)
{
	if (!(m_setLinesID.insert(nID).second)) return FALSE;
	if (!((0x0000FFFF) & nStyle)) nStyle |= PS_SOLID;
	stuctLine structLineTmp;
	structLineTmp.bIsAuto = ((LS_HORZAUTO & nStyle)? TRUE : FALSE);
	structLineTmp.bPoints = ((LS_POINT & nStyle)? TRUE : FALSE);
	structLineTmp.nAutoHorzInc = nAutoInc;
	structLineTmp.crColor = crColor;
	structLineTmp.nStyle = ((0x0000FFFF) & nStyle);
	structLineTmp.nWidth = nWidth;
	structLineTmp.bIsVisible = bVisible;
	m_mapLines[nID] = structLineTmp;
	//统计子集数目
	m_nSet++;
	//////////////
	return TRUE;
}

template<class T> 
BOOL CScrollChart<T>::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
{
	dwStyle |= WS_CHILD;
	dwStyle |= WS_HSCROLL;
	if (dwStyle & GS_NOTIFY) m_bNorify=TRUE; else m_bNorify=FALSE;
	dwStyle &= ~(GS_NOTIFY);
	BOOL nresult = CWnd::Create(NULL, NULL,dwStyle, rect, pParentWnd, nID, NULL);
	m_ColorBk = RGB(0,0,0);

	m_bGrid = TRUE;
	m_MinValue = 0;	
	//m_MaxValue = m_nHzRange;
	m_MaxHzVal = m_nHzRange;
	m_MaxValue = 0;
	m_nHorzDiv = 20;
	m_nVertDiv = 12;
	UpdateScrollInfo();
	return nresult;
}

template<class T> 
void CScrollChart<T>::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar )
{
	float nIntPos;
		CString tmp;
	switch (nSBCode) {

	case SB_LINELEFT:
		if (m_pointIni < 1) return;
		m_pointIni -= (m_nHzRange * .01);//点击滚动条左边按钮的操作
		break;
	case SB_LINERIGHT:
		m_pointIni += (m_nHzRange * .01);//点击滚动条右边按钮的操作
		break;

	case SB_PAGEUP:
		m_pointIni -= m_nHzRange / 2;//点击滚动条滑块左边的操作
		if ( m_pointIni < 0 ) m_pointIni = 0;
		break;

	case SB_PAGERIGHT:
		m_pointIni += m_nHzRange / 2;//点击滚动条滑块右边的操作
		break;

	case SB_THUMBTRACK:	
		nIntPos=( (int)nPos / (SCROLL_VALUE) );//点击滑块本身的操作
		m_pointIni = ( (m_MaxHzVal - m_MinHzVal ) * nIntPos) + m_MinHzVal;
		break;
	default:
		return;
		}	
	if ((m_pointIni > m_MaxHzVal - m_nHzRange)) m_pointIni = m_MaxHzVal - m_nHzRange;
	if ( m_pointIni < m_MinHzVal ) m_pointIni = m_MinHzVal;
	//////
	//m_mapLines[uID].m_Time[uX] = GetCurrentTime();
	//////
	Invalidate();//重绘
	UpdateScrollInfo();

}

template<class T> 
COLORREF CScrollChart<T>::SetBkColor(COLORREF cr )
{
	COLORREF crOld = m_ColorBk;
	m_ColorBk = cr;
	Invalidate();
	return crOld;
}

template<class T> 
COLORREF CScrollChart<T>::GetBkColor() const
{
	return m_ColorBk;
}

template<class T> 
COLORREF CScrollChart<T>::SetLineColor(UINT nID, COLORREF cr )
{
	COLORREF crOld;
	if (m_setLinesID.find(nID) == m_setLinesID.end()) return NULL;
	crOld = m_mapLines[nID].crColor;
	m_mapLines[nID].crColor = cr;
	Invalidate();
	return crOld;
}

template<class T> 
COLORREF CScrollChart<T>::GetLineColor(UINT nID) 
{
	if (m_setLinesID.find(nID) == m_setLinesID.end()) return NULL;
	return m_mapLines[nID].crColor;
}

template<class T> 
int CScrollChart<T>::SetLineStyle(UINT nID, int nStyle,BOOL bDraw)
{
	if (m_setLinesID.find(nID) == m_setLinesID.end()) return 0;
	int nResult = m_mapLines[nID].nStyle;
	m_mapLines[nID].nStyle = nStyle;
	if (bDraw) Invalidate();
	return nResult;
}

template<class T> 
int CScrollChart<T>::GetLineStyle(UINT nID)
{
	if (m_setLinesID.find(nID) == m_setLinesID.end()) return 0;
	return m_mapLines[nID].nStyle;
}

template<class T> 
int CScrollChart<T>::SetLineWidth(UINT nID, int nWidth,BOOL bDraw)
{
	if (m_setLinesID.find(nID) == m_setLinesID.end()) return 0;
	int nResult = m_mapLines[nID].nWidth;
	m_mapLines[nID].nWidth = nWidth;
	if (bDraw) Invalidate();
	return nResult;
}

template<class T> 
int CScrollChart<T>::GetLineWidth(UINT nID)
{
	if (m_setLinesID.find(nID) == m_setLinesID.end()) return 0;
	return m_mapLines[nID].nWidth;
}

template<class T> 
T CScrollChart<T>::SetAutoinc(UINT nID,T nInc)//设置点间距
{
	if (m_setLinesID.find(nID) == m_setLinesID.end()) return 0;
	T nTmp = m_mapLines[nID].nAutoHorzInc;
	m_mapLines[nID].nAutoHorzInc = nInc;
	return nTmp;

}

template<class T> 
void CScrollChart<T>::ShowLine(UINT nID, BOOL value, BOOL bDraw)
{
	if (m_setLinesID.find(nID) == m_setLinesID.end()) return;
	m_mapLines[nID].bIsVisible = value;
	if (bDraw) Invalidate();
}

template<class T> 
void CScrollChart<T>::ShowPoints(UINT nID, BOOL value, BOOL bDraw)
{	
	if (m_setLinesID.find(nID) == m_setLinesID.end()) return;
	m_mapLines[nID].bPoints = value;
	if (bDraw) Invalidate();
}

template<class T> 
UINT CScrollChart<T>::SetMaxPoints(UINT nValue)
{
	UINT nTemp = m_nMaxPoints;
	m_nMaxPoints = nValue;
	if (nTemp != nValue) 
	{
		
		ErasePoints();
		Invalidate();
	}
	return nTemp;
}

template<class T> 
void CScrollChart<T>::SetGrid(BOOL value)
{
	m_bGrid = value;
	Invalidate();
}

template<class T> 
UINT CScrollChart<T>::SetHorzDiv(UINT nDiv, BOOL bDraw)
{
	UINT nTmp = m_nHorzDiv;
	m_nHorzDiv = nDiv;
	if (bDraw) Invalidate();
	return nTmp;
}

template<class T> 
UINT CScrollChart<T>::SetVertDiv(UINT nDiv, BOOL bDraw)
{
	UINT nTmp = m_nVertDiv;
	m_nVertDiv = nDiv;
	if (bDraw) Invalidate();
	return nTmp;
}

template<class T> 
CPoint CScrollChart<T>::LPtoDP(T X,T Y)
{
	int nY;
	int nX;
	CRect rectClient;
	GetClientRect(rectClient);
	nY = ((rectClient.Height() * Y * .95) / m_MaxValue);
	nX = ((rectClient.Width() * (X - m_pointIni)) / m_nHzRange);
	return CPoint(nX, rectClient.Height() - nY);
}

template<class T> 
T CScrollChart<T>::SetHorzRange(T nRange)
{
	T nTmp = m_nHzRange;
	m_nHzRange = nRange;
	if (m_MaxHzVal < m_nHzRange) m_MaxHzVal = m_nHzRange * 1.1;
	//Normalize();
	UpdateScrollInfo();
	return nTmp;
}

template<class T> 
BOOL CScrollChart<T>::bIsFirstPoint()
{
	MAPLINE::const_iterator iterLine = m_mapLines.begin();
	while ( (iterLine) != m_mapLines.end() )
	{
		if ( !(*iterLine).second.m_mapData.empty() ) 
			return FALSE;
		++iterLine;
	}
	return TRUE;
}

template<class T> 
void CScrollChart<T>::UpdateScrollInfo()//滚动条滚动消息处理
{
	SCROLLINFO si;
	si.fMask = SIF_ALL;
	si.nPos = SCROLL_VALUE * ( (m_pointIni - m_MinHzVal) / ( m_MaxHzVal - m_MinHzVal ) );;
	si.nMin = 0;
	si.nMax = SCROLL_VALUE;
	si.nPage = SCROLL_VALUE * ( m_nHzRange / ( m_MaxHzVal - m_MinHzVal ) );	
	SetScrollInfo(SB_HORZ, &si, TRUE);
	SendNewLimits();
}

template<class T> 
BOOL CScrollChart<T>::ErasePoints()
{
	
	if (!m_nMaxPoints) return FALSE;
	BOOL bResult = FALSE;
	MAPLINE::iterator iterLine = m_mapLines.begin();
	while ((iterLine) != m_mapLines.end())
	{
		while ( ( (*iterLine).second.m_mapData.size() ) > m_nMaxPoints ) 
		{
			(*iterLine).second.m_mapData.erase((*iterLine).second.m_mapData.begin() );
			bResult = TRUE;
		}		
		++iterLine;
	}

	if (bResult)
	{
		BOOL bFirst=FALSE;	
		iterLine = m_mapLines.begin();
		while ( (!bFirst) && ((iterLine) != m_mapLines.end()) )
		{
			if ( !((*iterLine).second.m_mapData.empty()) )  
			{
				m_MinHzVal = ( (*((*iterLine).second.m_mapData.begin()) ).first);
				bFirst = TRUE;
			}
			++iterLine;
		}
		
		while ((iterLine) != m_mapLines.end())
		{
			if ( !((*iterLine).second.m_mapData.empty()) )  
			{
				if  ( m_MinHzVal > ( (*((*iterLine).second.m_mapData.begin() )).first) ) 	
					m_MinHzVal = ( (*((*iterLine).second.m_mapData.begin() )).first);
			}
			++iterLine;
		}
	}
	return bResult;
}

template<class T> 
void CScrollChart<T>::SendNewLimits()
{
	if(!m_bNorify) return;
	GetParent()->PostMessage (WM_NEWHORZLIMITS,
							(T) m_pointIni, 
							(T) m_pointIni + m_nHzRange );
	GetParent()->PostMessage (WM_NEWVERTLIMITS, 
							(T) m_MinValue, (T) m_MaxValue);
}

template<class T> 
void CScrollChart<T>::Normalize()
{
		if ( m_pointIni < m_MinHzVal ) m_pointIni = m_MinHzVal;
		if ( m_MaxHzVal < m_pointIni + m_nHzRange) m_MaxHzVal = m_pointIni + m_nHzRange;
}
template<class T> 
void CScrollChart<T>::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	/*/AfxMessageBox("nonthing");
	CSetDlg* dlg;
	dlg = new CSetDlg(this);
	dlg->Create(IDD_SETTING_DLG,NULL);
	dlg->ShowWindow(SW_SHOW);
	dlg->SetWindowPos(NULL,400,300,0,0,SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE);
	//CScrollChart<T>::OnLButtonDblClk(nFlags, point);*/
}
template<class T>
CString CScrollChart<T>::GetCurrentTime()
{
	CTime cntTime;
	int iHour;
	int iMinute;
	int iSecond;
	CString cHour;
	CString cMinute;
	CString cSecond;
	CString cCntTime;

	cntTime = CTime::GetCurrentTime();
	iHour = cntTime.GetHour();
	iMinute = cntTime.GetMinute();
	iSecond = cntTime.GetSecond();

	cHour.Format("%d",iHour);
	cMinute.Format("%d",iMinute);
	cSecond.Format("%d",iSecond);

	cCntTime = cHour+":"+cMinute+":"+cSecond;
	//cCntTime = cSecond;
	return cCntTime;
}
#endif 


  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -