VS2013 使用MsChart图表控件显示曲线波形图和数据波峰波谷标记
安装
MSCHART注册.exe
MSCHRT20.OCX
也可以手动注册
32位系统下:
1. 将放在windows/system32目录下。(注意,这个文件名中的没有字母a,即没有写chart中的字母a)
2.使用命令regsvr32 MSCHRT20.OCX来注册。
64位系统下:
1. 确保win7管理员权限
2. 把OCX控件,放到C:\Windows\SysWow64路径下面
3. 进入cmd,管理员权限运行
4. regsvr32 C:\Windows\SysWow64\MSCHRT20.OCX
注册成功会提示的。
在VS2013的对话框中的应用如下:
打开VS2013,新建一个MFC工程,点击VS中的“工具->选择工具箱->COM组件”,到Microsoft Chart Control,version 6.0(OLEDB)并勾选上。接下来,就可以在工具箱中看到该控件
首先建立一个基于对话框的工程文件,在对话框界面单击右键->插入Activex控件->Microsoft Chart Control,version 6.0(OLEDB)即可。
新建MFC工程
建立对话框应该程序
点击完成,右击插入ActiveX控件
列表中到Microsoft Chart Control 6.0(SP4) (OLEDB)控件
点确定按钮插入MsChart图表控件
在控件上右击添加变量
这时候并不能使用MsChart控件的所有功能,还需要添加控件的所有类,添加步骤如下,先打开类向导
点“…”到MSCHRT20.OCX文件
注意OCX控件32位系统在C:\ windows/system32目录下
64位系统在C:\Windows\SysWow64路径下面
注意左侧会列出控件的所有类,可选择添加
点击“>”逐个添加要用到的类,好像只能一个一个添加,最好全部添加
添加完成按确定会自动加载.h和.cpp文件到工程中,这时才可以使用控件的所有功能
下面是整理出来的一些主要功能
void CMyPD3000Dlg::Init_Mschart(CMschart1& m_chartt1)
{
    m_chartt1.put_AllowSelections(FALSE);    //是否可以选择图表对象
    m_chartt1.put_AllowSeriesSelection(FALSE);//单击单个的图表数据点时是否可选定整个系列。
    //栈模式,要放在前面
    m_chartt1.put_Stacking(TRUE);  //栈模式,要放在前面
    //显示类型
    m_chartt1.put_chartType(3);
    //m_chartt1.put_SeriesType(3);
    //m_chartt1.put_ColumnCount(1);  //设置曲线条数
    m_chartt1.put_ColumnCount(4);  //设置曲线条数
    //初始设置行
    //m_chartt1.put_RowCount(64); //一条曲线有64个点
    //m_chartt1.put_RowCount(Line_Points);//一条曲线有15个点
    m_chartt1.put_RowCount(100);//一条曲线有100个点
    //设置标题
    /*
    m_chartt1.put_TitleText(_T("按键1曲线"));//设置标题
    CVcTitle vctitle;
    vctitle = _Title();
    vcFont = _VtFont();
    vcColor = _VtColor();
    vcColor.Set(0, 255, 0);//设置标题颜
    vcFont.put_Size(20);//设置标题字体
    */
    //设置标题
    //改变背景颜
    /*
    CVcBackdrop vcbackdrop;
    CVcFill vcfill;
    vcbackdrop = _Backdrop();
    vcfill = _Fill();
    vcfill.put_Style(1);
    CVcBrush vcbrush;
    vcbrush = _Brush();
    vcColor = _FillColor();
    vcColor.Set(100, 100, 100);
    //vcColor.Set(211, 223, 240);
    */
    //改变背景颜
    //显示图例
    /*
    m_chartt1.put_ShowLegend(TRUE);
    m_chartt1.put_Column(1);
    m_chartt1.put_ColumnLabel((LPCTSTR)_T("去值"));
    m_chartt1.put_Column(2);
    m_chartt1.put_ColumnLabel((LPCTSTR)_T("回值"));
    */
    m_chartt1.put_ShowLegend(FALSE);
    //显示图例
    // 设置图例颜
    //_Legend().get_VtFont().get_VtColor().Set(0, 255, 0);
    //m_chartt1.put_Row(1);
    //m_chartt1.put_RowLabel((LPCTSTR)(_T("12")));
    //m_chartt1.put_Row(2);
    //m_chartt1.put_RowLabel((LPCTSTR)(_T("24")));
    /*for(int i = 1; i <= _RowCount(); i ++)
    {
    CVcDataGrid vcDataGrid = _DataGrid();
    vcDataGrid.SetData(i,1,rand() % 200,0);
    }*/
    //m_chartt1.put_RowLabel((LPCTSTR)_T(""));
    //for (UINT i = 1; i <= _RowCount(); i++)
    //{
    //    CVcDataGrid vcDataGrid = _DataGrid();
    //    vcDataGrid.SetData(i, 1, 0, 0);
    //}
    CVcAxis vcaxis;
    CVcFont    vcFont;
    CVcColor vcColor;
    CVcPlot vcplot = m_chartt1.get_Plot();
    //vcplot.put_UniformAxis(TRUE);
    //X、Y轴名称
    VARIANT var;
    CVcAxisTitle vcAxistitle;
    vcaxis = _Axis(0, var);//0为X轴,1为Y轴,2为第二Y轴
    vcAxistitle = _AxisTitle();
    //vcAxistitle.put_Text(_T("位移"));//X轴名称
    vcAxistitle.put_Visible(FALSE);
    vcaxis = _Axis(1, var);//0为X轴,1为Y轴,2为第二Y轴
    vcAxistitle = _AxisTitle();
    //vcAxistitle.put_Text(_T("荷重(N)"));//Y轴名称
    vcAxistitle.put_Visible(FALSE);
    //X、Y轴名称
    CVcCategoryScale vccat;
    CVcPen vcpen;
    CVcValueScale vcvalue;
    CVcLabels vclabels;
    CVcLabel vclabel;
    CVcAxis vcAxis;
    //X轴
    vcAxis = _Axis(0, var);//0为X轴,1为Y轴,2为第二Y轴
    vcvalue = _ValueScale();
    vccat = _CategoryScale();
    vccat.put_Auto(FALSE);控件的使用
    //vccat.put_DivisionsPerLabel(1);//设置X轴为1每1个刻度一个标注,2为每2个刻度一个标注
    vccat.put_DivisionsPerTick(10);//设置X轴为每刻度一个刻度线
    vcpen = _Pen();
    vcColor = _VtColor();
    vcColor.Set(0, 0, 0);//X轴基线颜
    vclabels = _Labels();
    vclabel = _Item(1);
    vcFont = _VtFont();
    vcColor = _VtColor();
    //vcColor.Set(245, 245, 245);//X轴刻度数据值颜
    //vcColor.Set(255, 255, 0);//X轴刻度数据值颜
    //vcFont.put_Size(20);//设置标题字体
    vcvalue.put_Auto(FALSE);//不自动标注X轴刻度
    //vcvalue.put_Maximum(300);//X轴最大刻度
    vcvalue.put_Maximum(100);//X轴最大刻度100,1.00mm
    //vcvalue.put_Minimum(-100);//X轴最小刻度
    vcvalue.put_Minimum(0);//X轴最小刻度
    vcvalue.put_MajorDivision(10);//X轴刻度10等分,每100/10=10

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。