MFC high-speed-charting控件使用(添加垂直游标,两个控件的联动)
应用场景
最近参与的一个项目中涉及到在一个对话框中添加两个high-speed-charting控件,在两个控件中添加dragline游标,并要求:
- 光标不可越过其左右游标且不能拖到控件外;
- 拖动其中一个控件中的dragline游标时,另一个控件中对应游标也移动。
控件的基础使用
参考了大神尘中远的博客TeeChart替代品,MFC下好用的高速绘图控件-(Hight-Speed Charting),详细讲述了如何添加控件,并在控件中添加坐标轴和画线。
Hight-Speed Charting自带对chart的缩放,左键拖动控制缩放,右键拖动chart,但由于添加dragline游标后也需要左键拖动,有冲突,所以本文中禁用了其缩放(调用yourChartCtrlName.SetZoomEnabled(false);),当然,也可以尝试将缩放移到鼠标滚轮,但由于本人对此部分不太熟悉,希望能有人加以改进
添加游标前的准备工作
1.添加所需的函数,变量
(1)ChartDragLineCursor.h中声明函数及变量
public:
CChartCtrl* GetParent();
void SetPosition(double dPosition);
void SetWidth(int NewWidth)
double GetValuePosition()
bool GetDragged();
double minx,maxx;
private:
long last_lPosition;
int m_iLineWidth;
(2)以下代码为ChartDragLineCursor.cpp中几个函数的实现(要先在.h文件的类中声明该函数)
CChartCtrl* CChartDragLineCursor::GetParent()
{
return m_pParentCtrl;
}
void CChartDragLineCursor::SetPosition(double dPosition)
{
m_lPosition = m_pRelatedAxis->ValueToScreen(dPosition);
}
void CChartDragLineCursor::SetWidth(int NewWidth)
{
m_iLineWidth = NewWidth;