www.gusucode.com > VC++自定义图表控件及使用例子源码程序 > VC++自定义图表控件及使用例子源码程序\code\ChartCtrl_demo\ChartDemo\ChartCtrl\ChartDragLineCursor.cpp
//Download by http://www.NewXing.com /* * * ChartDragLineCursor.cpp * * Written by C閐ric Moonen (cedric_moonen@hotmail.com) * * * * This code may be used for any non-commercial and commercial purposes in a compiled form. * The code may be redistributed as long as it remains unmodified and providing that the * author name and this disclaimer remain intact. The sources can be modified WITH the author * consent only. * * This code is provided without any garanties. I cannot be held responsible for the damage or * the loss of time it causes. Use it at your own risks * * An e-mail to notify me that you are using this code is appreciated also. * * */ #include "stdafx.h" #include "ChartDragLineCursor.h" #include "ChartCtrl.h" CChartDragLineCursor::CChartDragLineCursor(CChartCtrl* pParent, CChartAxis* pRelatedAxis) : CChartCursor(pParent), m_pRelatedAxis(pRelatedAxis), m_lPosition(0), m_bDragged(false) { } CChartDragLineCursor::~CChartDragLineCursor() { } void CChartDragLineCursor::Draw(CDC* pDC) { CPen NewPen(PS_SOLID,1,m_colCursor); CPen* pOldPen = pDC->SelectObject(&NewPen); CRect plottingRect = m_pParentCtrl->GetPlottingRect(); if (m_pRelatedAxis->IsHorizontal()) { pDC->MoveTo(m_lPosition, plottingRect.top); pDC->LineTo(m_lPosition, plottingRect.bottom); } else { pDC->MoveTo(plottingRect.left, m_lPosition); pDC->LineTo(plottingRect.right, m_lPosition); } pDC->SelectObject(pOldPen); NewPen.DeleteObject(); } void CChartDragLineCursor::OnMouseButtonDown(CPoint mousePoint) { long position = 0; if (m_pRelatedAxis->IsHorizontal()) position = mousePoint.x; else position = mousePoint.y; if ( (position >= m_lPosition-3) && (position <= m_lPosition+3) ) { m_bDragged = true; } } void CChartDragLineCursor::OnMouseButtonUp(CPoint /*mousePoint*/) { m_bDragged = false; } void CChartDragLineCursor::OnMouseMove(CPoint mousePoint) { if (!m_bDragged) return; double XVal = 0; double YVal = 0; if (m_pRelatedAxis->IsHorizontal()) { m_lPosition = mousePoint.x; XVal = m_pRelatedAxis->ScreenToValue(m_lPosition); } else { m_lPosition = mousePoint.y; YVal = m_pRelatedAxis->ScreenToValue(m_lPosition); } CursorMoved(XVal, YVal); } void CChartDragLineCursor::SetPosition(double dPosition) { m_lPosition = m_pRelatedAxis->ValueToScreen(dPosition); }